2017-01-22 1 views
0

Mon programme (Eclipse Neon) se bloque pendant l'exécution de mon programme. J'ai trouvé la ligne avec le problème, mais je ne sais pas comment le résoudre.Erreur lors de la mise d'un élément dans mon tableau. C

Tout d'abord je fais un tableau dynamique:

int nLeden = 0; 
AtletiekLid *ledenArray = (AtletiekLid *)calloc(nLeden, sizeof(AtletiekLid)); 

avec cette structure:

typedef struct { 
    char naam[30]; 
    unsigned leeftijd; 
} AtletiekLid; 

Après que je fais ceci:

AtletiekLid lid; 

strcpy(&lid.naam, "Test"); 
strcpy(&lid.leeftijd, "18"); 
addLid(ledenArray, lid, nLeden); //Program stopped working (windows error) on this line. 

la fonction addLid:

void addLid(AtletiekLid **ledenArray, AtletiekLid lid, int *nLeden) { 
    *ledenArray = (AtletiekLid *)realloc(*ledenArray, (*nLeden + 1) * sizeof(AtletiekLid)); 
    (*ledenArray)[*nLeden] = lid; 
    (*nLeden)++; 
} 

Dans le addLid (où mon programme est écrasé), il est écrasé sur cette ligne:

*ledenArray = (AtletiekLid *)realloc... 

quelqu'un peut me aider, je ne sais pas ce que je fais mal.

+5

'strcpy (& lid.leeftijd," 18 ");' -> 'lid.leeftijd = 18'. N'ignorez pas les avertissements du compilateur. –

+1

n'utilisez jamais la même variable de pointeur que l'affectation côté gauche à un appel 'realloc'. – t0mm13b

+0

@MichaelWalz cela ne résout pas le problème. –

Répondre

1

Il y a 3 erreurs dans le fragment de code affiché:

  • strcpy(&lid.naam, "Test"); devrait lire strcpy(lid.naam, "Test"); comme lid.naam est un tableau qui se désintègre en un pointeur vers son premier élément lorsqu'il est passé à une fonction.

  • strcpy(&lid.leeftijd, "18"); est incorrect. lid.leeftijd est un unsigned int, vous devriez plutôt écrire lid.leeftijd = 18;

  • addLid(ledenArray, lid, nLeden); est incorrect aussi que addLid attend un pointeur vers un pointeur comme premier argument et un pointeur sur le nombre d'éléments que le troisième, il peut mettre à jour ces derniers dans la portée de l'appelant. Vous devriez écrire ceci: addLid(&ledenArray, lid, &nLeden);

Notez que vous devez compiler votre programme avec plus d'avertissements a permis de laisser la question du compilateur diagnostics utiles sur ce type de discordances de type.