2014-05-21 45 views
0

我有一個結構「ListStruct」,它基本上是一個結構「Info」的動態數組。這裏是我創建ListStruct:釋放動態字符數組*

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

的結構「信息」中有幾個整數,它有一個int密鑰大小和一個char *鍵。我這是怎麼分配的信息結構中的「字符*鍵」:

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

在我freeArray功能,我越來越對上環的第二迭代「雙自由或損壞」的錯誤。這裏是代碼:

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; 
} 

這可能是一個愚蠢的錯誤,但我做錯了什麼?

編輯:發現錯誤。檢查解決方案的意見

+5

[不要投出'malloc'的結果](http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc) –

+1

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

+0

好吧,我不再投射。仍然出錯 – BlueMoon93

回答

3

發現錯誤。我在列表中添加了5次相同的Info變量(用於測試)。由於它是相同的變量,它是相同的內存區域,我試圖釋放它5次時分配一次。