已关闭
【缺陷报告】内存泄漏 - 文件test_aclnn_mla_preprocess_v2.cpp - 函数main - 行号418 #4793
zhangjunkai9创建于 8月31日关闭于 9月11日
游震
9月3日 评论:
9月3日 评论:
/assign @chaotang233


9月3日 将 chaotang233 设为负责人
9月10日 关联了pull request:fix mla_prprocess_v2 example memory leaks
9月11日 关闭了 issue
9月11日 添加了label:resolved
缺陷信息
缺陷描述
在 main 函数中,第418-429行通过 CreateAclTensorND 创建了5个输出张量(qOut、kvCacheOut、qRopeOut、krCacheOut、qDownOut),每个都通过 aclrtMalloc 分配了 device 和 host 内存。但在函数末尾的资源释放段(第479-554行),仅释放了24个输入张量的 aclTensor、device 和 host 内存,完全遗漏了这5个输出张量的 aclDestroyTensor、aclrtFree(deviceAddr) 和 aclrtFree(hostAddr) 调用,导致5个输出张量的设备内存、host内存和 aclTensor 对象全部泄漏。
事实核查
数据流证据
传播路径:
调用链
可达调用链1 起点:
(entry functions)→ 终点:main深度:0修复建议
// 在第502行之后补充输出张量的 aclDestroyTensor 调用 aclDestroyTensor(qOut); aclDestroyTensor(kvCacheOut); aclDestroyTensor(qRopeOut); aclDestroyTensor(krCacheOut); aclDestroyTensor(qDownOut); // 在第528行之后补充输出 device 地址的 aclrtFree 调用 aclrtFree(qOutDeviceAddr); aclrtFree(kvCacheOutDeviceAddr); aclrtFree(qRopeOutDeviceAddr); aclrtFree(krCacheOutDeviceAddr); aclrtFree(qDownOutDeviceAddr); // 在第554行之前补充输出 host 地址的 aclrtFree 调用 aclrtFree(qOutHostAddr); aclrtFree(kvCacheOutHostAddr); aclrtFree(qRopeOutHostAddr); aclrtFree(krCacheOutHostAddr); aclrtFree(qDownOutHostAddr);