当我尝试释放(void*key)时检测到堆损坏 [英] HEAP CORRUPTION DETECTED when i try to free(void * key)
本文介绍了当我尝试释放(void*key)时检测到堆损坏的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在程序结束时遇到释放内存的问题。 这是学校的练习,用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);
} }
这是我为密钥本身错误锁定的地方(问题可能出在这里):
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] = ' ';
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释放节点本身工作正常!
感谢您的帮助以及有关代码功能的任何提示和意见。
函数.c的完整代码粘贴可在此处找到: http://pastebin.com/TqaNK5v8-函数推荐答案
99超过100是指cur->键未分配或释放多次。
也
user_input[strlen(buffer)+1] = ' ';
应
user_input[strlen(buffer)] = ' ';
必须在scanf之前分配缓冲区才能保存使用scanf检索的输入数据。
查看您粘贴的代码无法了解更多信息
希望这能有所帮助
这篇关于当我尝试释放(void*key)时检测到堆损坏的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文