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

C语言free释放malloc内存失效,地址sanitizer报内存泄漏问题

内存泄漏原因及修复方案

泄漏原因

  • 临时节点名内存未释放:你在解析门电路输出节点时,遇到不存在的节点名会动态新增names数组元素并分配17字节内存存储节点名,这部分临时节点(总计tcount个)的内存你完全没有做释放处理,当前只释放了前2个常量节点、icount个输入节点、ocount个输出节点对应的内存。
  • 门电路配置内存批量泄漏:你在循环解析每个门电路时,都会给当前step的inputs/outputs/selectors三个指针分配内存,然后通过结构体浅拷贝把这三个指针存入temp数组。你当前只释放了最后一次循环用到的局部变量step持有的三块内存,前面scount-1个门电路对应的所有inputs/outputs/selectors内存全部泄漏。
  • names指针数组本身未释放:你为names(char**类型)分配的存储指针的数组内存,最终没有调用free(names)释放。

修复方案

  1. 替换原来只释放输入、输出节点的代码,直接遍历所有names元素释放,同时释放names指针数组本身:
// 替换原有的输入、输出节点释放逻辑
for (i = 0; i < size; i++) {
    free(names[i]);
}
free(names);
  1. 在释放temp数组之前,遍历所有门电路实例释放动态分配的数组,同时删除原有的free(step.inputs)/free(step.outputs)/free(step.selectors)三行代码,避免重复释放:
// 释放所有门电路的动态内存
for (i = 0; i < scount; i++) {
    free(temp[i].inputs);
    free(temp[i].outputs);
    free(temp[i].selectors);
}
free(temp);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 18:27:04