Bonjour à tous,
J'ai besoin de vos lumières, car je cale!
Voici la déclaration d'une structure:
En fonction du nombre d'entrées à mémoriser, j'alloue la structure de la manière suivante (les tests de malloc==NULL ont été supprimés):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 typedef struct { int nentry; char **fullname; char **shortname; int *pos; } PLAYLIST;
Dans mon esprit:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 PLAYLIST *plAlloc(int nentry) { PLAYLIST *pl; pl=malloc(sizeof(PLAYLIST)); if(pl!=NULL) { pl->fullname=malloc(nentry*sizeof(char *)); pl->shortname=malloc(nentry*sizeof(char *)); pl->pos=malloc(nentry*sizeof(int)); pl->nentry=nentry; } return(pl); }
pl->fullname et pl->shortname sont des 'tableaux' de nentry pointeurs vers des chaines de caractères,
pl->pos est un 'tableau' de nentry int
Enfin, lorsque je remplis ma structure, je le fais (séquentiellement, offset allant de 0 à nentry-1) de la manière suivante:
Le compilateur ne met aucune warning, mais lors de l'exécution mon programme se plante.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 int plFillList(PLAYLIST *pl,int offset,char *name) { char *sptr; *(pl->fullname+offset)=malloc(strlen(name)+1); if(*(pl->fullname+offset)==NULL) { fprintf(stderr,"plFillList: malloc error (%d)\n",offset); exit(0); // n'arrive jamais ! } strcpy(*(pl->fullname+offset),name); sptr=strrchr(*(pl->fullname+offset),'\\'); if(sptr==NULL) sptr=*(pl->fullname+offset); *(pl->shortname+offset)=sptr; *(pl->pos+offset)=offset+1; return(0); // provisoire }
Quelqu'un at-t-il une idée? Mauvaise utilisation de ma part des pointeurs?
Merci d'avance de votre aide.
Partager