Rechercher : dans
Par :

Poiteur sur liste des poiteurs dans union C++

Dernière réponse le 14 avr 2009 à 21:11:26 amirah, le 13 avr 2009 à 23:14:03 
 Signaler ce message aux modérateurs

Bonsoir,
Voilà mon problème j'ai besoin d'utiliser la structure union par exemple comme ça:
typedef list <int *> list_integer;
union un_uion{
int i;// un entier
list_integer ll;// une liste de pointeur d'entier
};
je trouve ces erreurs lors de compilation (en utilisant la commande g++):
erreur: member «list_integer un_uion::ll" with constructor not allowed in union
erreur: member «list_integer un_uion::ll" with destructor not allowed in union
erreur: member «list_integer un_uion::ll" with copy assignment operator not allowed in union

bon comme je suis débutante, j'ai choisie de changer la liste par pointeur sur la liste.
La compilation passe bien sans erreur mais lors de l'exécution il m'affiche Erreur de segmentation (core dumped).



voilà le nouveau code :

#include<list>
using namespace std;

typedef list <int *> list_integer;
union un_uion{
int i;
list_integer *ll;};

int main(){

un_uion l;

int *ptr_integer;

*ptr_integer=1;

(l.ll)->push_back(ptr_integer);
return 0;

}

SVP c'est urgent j'ai besoin d'aide.Je veux comprendre c'était quoi le problème la premiére fois?
Et pour quoi c'est résoulu lors de compilation quand j'ai changé la liste par un pointeur sur la liste?
Et c'est quoi ce problème d'exécution
SVP ne me dis pas chercher dans les cours parce que j'ai déjà essaié et j'ai pas trouvé une réponse à mes questions.
j'espére que j'ai bien détaillé le problème.
Merci.

Configuration: Linux
Firefox 2.0.0.22

Meilleures réponses pour « poiteur sur liste des poiteurs dans union C++ » dans :
Introduction à la STL en C++ (standard template library) VoirIntroduction Principales classes de la STL std::pair std::list std::vector std::set std::map Les iterators iterator et const_iterator reverse_iterator et const_reverse_iterator Les algorithmes ...
Liste simplement chaînée VoirLISTES SIMPLEMENT CHAINÉES Requis I. INTRODUCTION II. Définition III. La construction du prototype d'un élément de la liste IV. Opérations sur les listes chaînées A. Initialisation B. Insertion d'un élément dans la liste 1. Insertion...
Création d’un listener au niveau du serveur Oracle VoirPour créer un listener au niveau d’un serveur de base de données Oracle il suffit d’éditer les fichiers listener.ora tnsnames.ora au niveau du répertoire $ORACLE_HOME/network/admin. Pour démarrer le listener il faut utiliser la commande lsnrctl start
Langage C - Les listes chaînées VoirLa notion de structure autoréferrentielle Une structure autoréferrentielle (parfois appelée structure récursive) correspond à une structure dont au moins un des champs contient un pointeur vers une structure de même type. De cette façon on crée...
Les fonctions de l'API Socket VoirLes fonctions des sockets en détail La fonction socket() La création d'un socket se fait grâce à la fonction socket() : int socket(famille,type,protocole) famille représente la famille de protocole utilisé (AF_INET pour TCP/IP utilisant une...

1

loupius, le 14 avr 2009 à 01:04:16

Ouais, il y a une certaine carence dans l'utilisation des pointeurs ;-)
Prenons un exemple (j'ai choisi le plus simple, mais si tu comprends celui-là, il y a espoir que tu comprennes les autres ! )
int *ptr_integer;
*ptr_integer=1;

Tu déclares 'ptr_integer' comme un pointeur sur un entier et ensuite tu dis que le contenu de la case mémoire pointée par le pointeur est '1', mais tu n'as jamais réservé cette case mémoire. Après déclaration, le pointeur pointe sur n'importe quoi.
Ah oui l'utilisation des pointeurs est une chose délicate et il faut absolument les maîtriser sinon il faut changer de langages.
Avec les pointeurs, toujours respecter:
déclaration, allocation (ou initialisation), utilisation, libération
Toujours respecter et toujours dans l'ordre sinon on court inexorablement à la catastrophe.
Bon courage.

Répondre à loupius

2

 amirah, le 14 avr 2009 à 21:11:26

Merci tu m’as confirmé ce que j'ai constaté à pros pot les pointeurs.
Mais sais-tu pourquoi ce code
union un_uion{
int i;// un entier
list_integer ll;// une liste de pointeur d'entier
};
cause des erreurs lors de compilation et comment je peux le corriger.
Merci.

Répondre à amirah