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 -
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.
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])
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.
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.