当我尝试释放(void*key)时检测到堆损坏 [英] HEAP CORRUPTION DETECTED when i try to free(void * key)

查看:0
本文介绍了当我尝试释放(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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆