DELMAR_ 2021-06-17 14:51 采纳率: 57.1%
浏览 61
已采纳

C中free报错:heap corruption detected

这是一个关于AVL树的问题,我对current复制后,并没有改动其内容,怎么会free报错呢?求教!

以下是删除AVL节点的函数,在图中画红线的地方报了错。

 

展开全部

  • 写回答

2条回答 默认 最新

  • qfl_sdu 2021-06-17 15:17
    关注

    free前需要判断是否为NULL,代码修改如下:

    //原始代码
    if(parent->left == current){
    	parent->left = NULL;
    	free(current);//这里需要判断current是不是NULL
    }
    
    //上述代码修改为:
    if(parent->left == current){
    	if(current) free(current);
    	parent->left = NULL;
    }
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
    DELMAR_ 2021-06-17 15:27

    好像不大行....

    回复
    qfl_sdu 回复 DELMAR_ 2021-06-17 16:32

    你看一下你创建节点的时候,申请的空间是多大,这个错误一般都是操作malloc或者new申请的内存溢出。 用malloc或new申请了一个特定大小的内存,但是后期对这块内存进行复制,可能超过了该内存大小的范围,再进行free或者delete的时候,就会报错。如

    回复
    DELMAR_ 回复 qfl_sdu 2021-06-18 01:54

    问题解决了,但是我有一个不懂的地方:①node* r = (node*)malloc(sizeof(node));②node* r = (node*)malloc(sizeof(r)); 我写第二个的时候,free会报错,写第一个就不会,我看有些csdn的博主也是按第二种方式这么写,这是什么原因?[虚心求教]

    回复
    展开全部5条评论
查看更多回答(1条)
编辑
预览

报告相同问题?

手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部