在程序結束時釋放內存時出現問題。 這是來自學校的練習,用ADT實現二叉樹並用數據類型字符特定實現。當我嘗試釋放時檢測到堆損壞(void * key)
釋放代碼:
void free_tree(TreeNode *root){
TreeNode *cur;
if (!root) return;
else{
cur = root;
free_tree(cur->left);
free_tree(cur->right);
free(cur->key); //throws an error!
free(cur);
} }
這是我的malloc的密鑰本身(問題很可能是在這裏):
puts("Please enter a value for key of new node");
_flushall();
scanf("%s",&buffer);
user_input = (char *) malloc(sizeof(char)*(strlen(buffer)+1));
strcpy(user_input,buffer);
user_input[strlen(buffer)+1] = '\0';
p_node = create_tree_node(user_input); //this function append the new data to a new node, returns *TreeNode
insert_node_by_value(&root,p_node,str_comp);
break;
這是我的錯誤:
BTW釋放節點本身工作正常!
我會感謝您的幫助以及關於代碼功能的任何提示和意見。
functions.c的全部粘貼代碼可以在這裏找到: http://pastebin.com/TqaNK5v8 - 功能
當您嘗試寫入您不屬於自己的內存時會發生這種情況。你在哪裏分配內存? – Maroun
請顯示'value'的定義。它是一個指針類型嗎? –
typedef void * value; 「 – Lulu