Segmentation fault

tomjoss Messages postés 5 Date d'inscription   Statut Membre Dernière intervention   -  
tomjoss Messages postés 5 Date d'inscription   Statut Membre Dernière intervention   -
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 1060 Date d'inscription   Statut Membre Dernière intervention   244
 
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   Statut Membre Dernière intervention  
 
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 1060 Date d'inscription   Statut Membre Dernière intervention   244
 
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   Statut Membre Dernière intervention  
 
Hi, je retournais plusieurs element au lieu d un seul, comme declare ds la fonction. résolu.
0