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

如何修复这段C90矩阵路径搜索代码中的newPath内存泄漏?

修复BFS矩阵最短路径的内存泄漏问题

问题根源

初始队列节点的路径未通过malloc分配内存,但后续入队节点的路径都调用newPath(内部包含malloc)分配了内存。出队时所有节点的路径都执行free(path),但初始节点的路径并非堆内存,导致实际free次数比malloc少1次——初始节点的free操作无效,而有一块通过newPath分配的路径内存未被释放。

修复方案

给初始节点的路径也分配合法的堆内存,确保所有出队节点的路径都对应一次malloc调用:

  • 初始化队列节点时,不再用空指针或静态数组作为路径,而是调用newPath为初始节点分配路径空间,把起始坐标存入路径。
  • 保持后续节点入队前调用newPath复制并扩展路径的逻辑不变。
  • 出队时,所有节点的路径都可以安全执行free操作,此时malloc和free的次数完全匹配,不会出现内存泄漏。

代码示例片段

// 初始化起始节点
Node* startNode = (Node*)malloc(sizeof(Node));
startNode->x = startX;
startNode->y = startY;
// 为初始路径分配内存,替代原来的无分配逻辑
startNode->path = newPath(NULL, startX, startY); // newPath需处理NULL输入,生成仅含起始点的路径
startNode->next = NULL;
enqueue(queue, startNode);

注意事项

  • 确保newPath函数能够处理输入路径为NULL的情况,正确分配内存并写入起始坐标。
  • 所有入队节点的路径都必须通过malloc分配,出队时逐个free,避免混合使用栈内存/静态内存和堆内存的路径指针。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 20:05:56