Segmentation fault

Fermé
tomjoss Messages postés 5 Date d'inscription dimanche 29 juin 2014 Statut Membre Dernière intervention 6 juillet 2014 - 29 juin 2014 à 22:01
tomjoss Messages postés 5 Date d'inscription dimanche 29 juin 2014 Statut Membre Dernière intervention 6 juillet 2014 - 1 juil. 2014 à 02:19
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.

4 réponses

swoog42 Messages postés 1059 Date d'inscription mercredi 30 septembre 2009 Statut Membre Dernière intervention 16 décembre 2018 244
29 juin 2014 à 22:23
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])
0
tomjoss Messages postés 5 Date d'inscription dimanche 29 juin 2014 Statut Membre Dernière intervention 6 juillet 2014
30 juin 2014 à 02:00
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.
0
swoog42 Messages postés 1059 Date d'inscription mercredi 30 septembre 2009 Statut Membre Dernière intervention 16 décembre 2018 244
30 juin 2014 à 17:05
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 ! :)
0
tomjoss Messages postés 5 Date d'inscription dimanche 29 juin 2014 Statut Membre Dernière intervention 6 juillet 2014
1 juil. 2014 à 02:19
Hi, je retournais plusieurs element au lieu d un seul, comme declare ds la fonction. résolu.
0