已合并
fix: 修复examples中多个算子的内存泄漏及缓冲区越界问题 #1261
liu-wei创建于 10 天前
fix: 修复examples中多个算子的内存泄漏及缓冲区越界问题 #1261
已合并
Pull Request已成功合入, 合并人@CANN-robot
(感谢 liu-wei 的贡献)atomgit-bot
10 天前 评论:
10 天前 评论:
变更摘要
此 PR 主要修复了多个算子中的内存泄漏、缓冲区越界及资源清理问题。涉及约 20 个算子测试文件中 GenOnesData / GenOnesDataFloat32 辅助函数使用 new[] 分配内存后未释放的问题,以及 NMSWithMask 内核中 DataCopyExtParams 使用了错误的数据类型大小计算导致的缓冲区越界。同时修复了 scale_and_translate_aicpu 中资源分配失败时未回滚已分配内存、tensor_desc.cpp 中 ts 数组泄漏、以及 c_shell.cpp 中 realpath 返回值未校验的问题。
主要改动
- 测试辅助函数内存泄漏修复: 在
examples/add_example、image/、objdetect/等目录下共约 20 个测试文件中的GenOnesData和GenOnesDataFloat32函数内,Tensor构造完成后补充了delete[] pData,释放通过new[]分配的临时缓冲区。 NMSWithMask::CopyOut缓冲区大小修复: 将experimental/image/nms_with_mask/op_kernel/nms_with_mask.h中DataCopyExtParams的大小参数从scoresLength * sizeof(T)修正为scoresLength * sizeof(uint8_t),与目标LocalTensor<uint8_t>类型匹配,避免越界。InitSpans资源回滚修复: 在image/scale_and_translate/op_kernel_aicpu/scale_and_translate_aicpu.cpp中,当spans->weights分配失败时,先delete spans->starts并置空后再返回错误码,避免已分配内存泄漏。GetExePath中realpath返回值校验: 在tests/ut/op_api/op_api_ut_common/src/inner/c_shell.cpp中,对realpath返回值增加了空指针检查,并在使用后调用free释放,避免内存泄漏和空指针解引用。TensorListDesc::ToAclTypeRawPtr临时数组泄漏修复: 在tests/ut/op_api/op_api_ut_common/src/tensor_desc.cpp中,aclCreateTensorList调用后补充了delete[] ts,释放用于传递张量指针的临时数组。


atomgit-bot
10 天前 评论:
10 天前 评论:
10 天前 添加了label:cann-cla/yes
CANN-robot
10 天前 评论:
10 天前 评论:
此处折叠了144条消息 查看更多
9 天前 删除了关联的issue:[Bug-Report|缺陷反馈]: 内存泄漏 - tensor_desc.cpp
9 天前 删除了关联的issue:[Bug-Report|缺陷反馈]: 内存泄漏 - c_shell.cpp
9 天前 删除了关联的issue:[Bug-Report|缺陷反馈]: 内存泄漏 - test_geir_add_example.cpp
9 天前 删除了关联的issue:[Bug-Report|缺陷反馈]: 内存操作函数的目的缓冲区访问长度设置不正确 - nms_with_mask.h
9 天前 关联了issue:[Documentation|文档反馈]: 文档需补充符号说明的描述信息
Closes #719, #723, #724, #725, #731
描述
修复多个算子的内存泄漏及缓冲区越界问题,涉及 example 文件、kernel、aicpu 算子、UT 框架共 24 个文件。
修复分类
new[]分配后未delete[],Tensor 构造后 buffer 泄漏nms_with_mask.h:sizeof(T)应为sizeof(uint8_t),float 类型下读取 4 倍数据scale_and_translate_aicpu.cpp:spans 分配/计算失败后未释放已分配内存、返回值未检查c_shell.cpp:realpath返回值未判空tensor_desc.cpp:ts数组 + tensor 未释放关键修复
nms_with_mask.hscoresLength * sizeof(T)当 T=float 时越界读取 4 倍数据sizeof(uint8_t)scale_and_translate_aicpu.cppSWITCH_PARALLEL改为显式分支并检查返回值new[]分配后 Tensor 构造完未delete[]c_shell.cpprealpath(NULL)返回 NULL 时 crashtensor_desc.cppts数组 + tensor 泄漏功能影响
正常执行路径零影响,异常路径从静默吞错改为正确返回错误码。
关联的Issue
测试
相关功能点都已经经过测试。
文档更新
op_list.md 增加说明。
类型标签