Segmentation fault
tomjoss
Messages postés
8
Statut
Membre
-
tomjoss Messages postés 8 Statut Membre -
tomjoss Messages postés 8 Statut Membre -
Bonjour,
js suis encore un debutant en C++. j ecris actuellement un programme avec les pointer en c++. J'ai declare deux Structure et une Fonction.
struct Car {
const char* name;
const char* description;
};
struct ListCar {
int num;
struct Car* info;
};
------------------------------
ListCar information(){
ListCar *Infoptr = new Car[5];
Car info [2]= {{"bmwv","german"},{"peugeot","francais"}};
for(int i=0; i< 2;i++){
infoptr[i].num=i+1;
infoptr[i].info=&info[i];
}
return *infoptr;
}
------------------------------
kand je return la liste des Car de la fonction information() , les valeurs sont 00 pour le int num et des caractères ilisible pour struct Car * info. je recois ensuite une faute de Segmentation en gdb:
Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: KERN_INVALID_ADDRESS at address: 0x0000000000000008
0x00000001000014d3 in main ()
bref , il y a problem au niveau des valeurs retournes par la fonction.
Merci pour tout participation.
js suis encore un debutant en C++. j ecris actuellement un programme avec les pointer en c++. J'ai declare deux Structure et une Fonction.
struct Car {
const char* name;
const char* description;
};
struct ListCar {
int num;
struct Car* info;
};
------------------------------
ListCar information(){
ListCar *Infoptr = new Car[5];
Car info [2]= {{"bmwv","german"},{"peugeot","francais"}};
for(int i=0; i< 2;i++){
infoptr[i].num=i+1;
infoptr[i].info=&info[i];
}
return *infoptr;
}
------------------------------
kand je return la liste des Car de la fonction information() , les valeurs sont 00 pour le int num et des caractères ilisible pour struct Car * info. je recois ensuite une faute de Segmentation en gdb:
Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: KERN_INVALID_ADDRESS at address: 0x0000000000000008
0x00000001000014d3 in main ()
bref , il y a problem au niveau des valeurs retournes par la fonction.
Merci pour tout participation.
4 réponses
-
for(int i=0; i< 2;i++){
infoptr[i].num=i+1;
infoptr[i].info=&info[i]; /////////////
}
Sur la ligne marquée /////,
au premier passage, pas de problème (d'execution j'entends...)
au deuxiemepassage, tu essaie d'accerder à &info[2] (a cause du i+1 de la ligne précédente), alors que tu n'as déclaré que 2 "cases" possibles (soit [0] et [1]) -
Hi, merci d avance
j ai essaye d incremente la valeur de num. je crois bien la valeur de i reste inchangable pour la boucle. apres avoir pointe infoptr, j ai essaye de vérifier son contenu ds la fonction. il y a tous les valeurs. quand je retourne la valeur de la fonction et je tente d accède au contenu, je recois la segmentation. -
pardon j'ai lu en biais... pas d'erreur là où j'en ai mentionnée une... Par contre, pour le retour, tu ne devrais pas retourner &infoptr au lieu de *infoptr ?
désolé pour l'approximation, mais ca date de loin toutes ces histoires de pointeurs ! :)
-
Hi, je retournais plusieurs element au lieu d un seul, comme declare ds la fonction. résolu.