You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言中malloc分配内存后调用free报错,求错误原因分析

代码错误原因分析

核心错误:堆内存越界写入导致free崩溃

你的代码中function函数里的这一行是致命问题:

string[-1] = '\0';
  • malloc返回的指针string是分配内存块的起始地址,合法访问范围是string[0]到string[string1_length + string2_length](因为你分配了string1_length+string2_length+1个char,索引从0开始)。
  • string[-1]等价于*(string - 1),这是访问了分配内存块之外的地址,属于非法越界写入,会破坏堆管理器维护的内存块元数据(比如内存块大小、前后块链表指针等)。
  • 当后续调用free(string)时,堆管理器无法正确解析被破坏的元数据,直接触发程序崩溃,因此free之后的printf语句根本没有机会执行。

额外修正说明

字符串的终止符'\0'应该放在合法内存范围的最后一个位置,也就是:

string[string1_length + string2_length] = '\0';

而不是写到越界的位置。

内容的提问来源于stack exchange,提问作者3nondatur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 08:42:47