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;
}
查看[valgrind](http://valgrind.org/)或類似內容,如果您在識別內存泄漏時遇到問題,請返回此處! –
將它分配給某個東西后釋放'btreeRight'幾乎是一個保證的崩潰。我不知道如何解決這個問題,因爲我不知道'btree_NewRoot'是做什麼的。 –
** btree_NewRoot **在根被填充或在刪除過程中生成新的根,而btree的元素被刪除並且需要新的根來生成。如果我正在按照正確的方式釋放內存,我會懷疑。 valgrind在這個模塊** bplus_NewRoot **沒有顯示內存泄漏,但是釋放這個內存後我的樹不平衡。 – thetna