プログラムの最後にメモリを解放する際に問題が発生しました。これは学校の演習であり、ADT を使用したバイナリ ツリーの実装と、データ型 char を使用した特定の実装です。
解放コード:
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;
そして、これは私が得るエラーです:
ところで、ノード自体の解放は正常に機能しています!
コードの機能に関するヒントやコメントをいただければ幸いです。
functions.c の完全なコード ペーストは次の場所にあります: http://pastebin.com/TqaNK5v8 - 関数