Poiteur sur liste des poiteurs dans union C++

Fermé
amirah Messages postés 30 Date d'inscription mardi 10 juin 2008 Statut Membre Dernière intervention 23 février 2011 - 13 avril 2009 à 23:14
amirah Messages postés 30 Date d'inscription mardi 10 juin 2008 Statut Membre Dernière intervention 23 février 2011 - 14 avril 2009 à 21:11
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.

2 réponses

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.
0
amirah Messages postés 30 Date d'inscription mardi 10 juin 2008 Statut Membre Dernière intervention 23 février 2011 1
14 avril 2009 à 21:11
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.
0