2011-09-12 60 views
0

代碼如下: 我將指針指向root->pointers[0]後釋放了btreeRight,該指針保存了類似節點的指針。釋放它之後,我的程序不穩定,沒有獲得均衡的樹。你能否讓我知道我是否正確地釋放了內存?如果不是,請建議我如何釋放它?下面的代碼是否會泄漏內存

  int order =5; 

     typedef struct BTREE_HELP { 
     // 
     }*BTREE,BTREE_NODE; 

     BTREE btree_Start(void){ 
     BTREE TempBtreeNode; 
     TempBtreeNode = malloc(sizeof(BTREE_NODE)); 
     TempBtreeNode->keys=malloc((order-1) * sizeof(int)); 
     TempBtreeNode->pointers=malloc((order) * sizeof(void *)); 

     TempBtreeNode->isLeaf = FALSE; 
     TempBtreeNode->numKeys = 0; 
     TempBtreeNode->parent = NULL; 
     TempBtreeNode->next = NULL; 
     return TempBtreeNode; 
     } 


     BTREE btree_NewRoot(int key,BTREE btreeRight) { 
     BTREE root; 
     root = btree_start(); 
     root->keys[0] = key; 
     root->pointers[0] = btreeRight; 
     root->numKeys++; 
     root->parent = NULL; 
     btreeRight->parent = root; 
     free(btreeRight->keys); 
     free(btreeRight->pointers); 
     free(btreeRight); 
     return root; 
     } 
+1

查看[valgrind](http://valgrind.org/)或類似內容,如果您在識別內存泄漏時遇到問題,請返回此處! –

+3

將它分配給某個東西后釋放'btreeRight'幾乎是一個保證的崩潰。我不知道如何解決這個問題,因爲我不知道'btree_NewRoot'是做什麼的。 –

+0

** btree_NewRoot **在根被填充或在刪除過程中生成新的根,而btree的元素被刪除並且需要新的根來生成。如果我正在按照正確的方式釋放內存,我會懷疑。 valgrind在這個模塊** bplus_NewRoot **沒有顯示內存泄漏,但是釋放這個內存後我的樹不平衡。 – thetna

回答

4

您沒有內存泄漏。但爲什麼你釋放內存?您正在將btreeRight存儲在root中。

也許更好的縮進不會失誤。