2014-05-21 2 views
0

J'ai une structure "ListStruct" qui est fondamentalement un tableau dynamique d'une structure "Info". Voici comment je crée le ListStruct:Libérer un tableau dynamique de Char *

void initArray(ListStruct *a, size_t initialSize) 
{ 
    a->array = malloc(initialSize * sizeof(Info)); 
    a->used = 0; 
    a->size = initialSize; 
} 

Le struct "Info" a quelques ints en elle et il a un KEYSIZE int et une clé char *. Voici comment j'attribuer le signe « char * clé » dans la struct Info:

element->key = malloc(keySize*sizeof(char)); 

Sur ma fonction freeArray, je reçois une erreur « double libre ou la corruption » à droite sur la 2ème itération de la boucle. Voici le code:

void freeArray(ListStruct *a) 
{ 
    int temp; 
    for(temp=0; temp<a->used; temp++) 
    { 
     free(a->array[temp].key); 
     a->array[temp].key=NULL; 
     //reset some ints 
    } 

    free(a->array); 
    a->array = NULL; 
    a->used = a->size = 0; 
} 

Ceci est probablement une erreur stupide, mais qu'est-ce que je fais mal?

EDIT: bogue trouvé. Vérifier les commentaires pour la solution

+5

[Ne pas diffuser le résultat de 'malloc'] (http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc) –

+1

' a-> array = malloc (initialSize * sizeof * a-> array; ' – wildplasser

+0

Ok, je ne lance plus, je reçois toujours l'erreur – BlueMoon93

Répondre

3

Erreur trouvée. J'ajoutais la même variable Info 5 fois à la liste (pour tester). Comme c'était la même variable, c'était la même région de mémoire et je l'allouais une fois en essayant de la libérer 5 fois.

Questions connexes