2014-02-11 31 views
0

我有一個鏈接列表,每當我嘗試釋放根目錄時,它會導致錯誤提及標題。鏈接列表刪除導致釋放堆塊........修改後.......在它被釋放後

自由堆塊011B7EF8在011B7F38被釋放後被修改。

下面是創建的代碼:

if (root == NULL) { 
    root = (planet_type*)malloc(sizeof(planet_type)); 
      /* Here I add data to the struct that root points to */ 
} 

和刪除:

if (currentPlanet == root) { 
    root = currentPlanet->next; 
    free(currentPlanet); 
} 

哪裏currentPlanet是要被刪除,並傳遞給刪除功能,看起來像這樣的節點:

void deletePlanet(planet_type *currentPlanet) 

如果我刪除了「free(currentPlanet)」這一行,那麼代碼就可以工作。

這不是整個代碼。對於root之後的節點,程序按預期工作,刪除過程完全相同。

+2

[valgrind](http://valgrind.org)是你的朋友。 –

+0

as'gdb',很高興 – Gophyr

+0

也許這是一個問題,無論是在調用'deletePlanet' –

回答

0

確保在刪除節點/元素/任何內容時,在刪除當前節點之前,指向下一個節點的指針。否則,在刪除當前內容後,將不再能夠訪問下一個內容,因爲您沒有原始指針。

另外兩件事:使用gdbvalgrind,這是所有C作業中最好的兩種工具。

相關問題