c++运行时报错误:there is a mismatch in alloc and dealloc
2024-08-14
57
问题描述
在运行一个c/c++的程序时,报如下错误:ERROR: AddressSanitizer: alloc-dealloc-mismatch (operator new [] vs operator delete)。代码如下:
void DemoFunc(char *pBuf)
{
char* val2 = new char[256];
for (int i = 0; i 254; i++)
{
val2[i] = pBuf[i+305];
}
val2[254] = 0; // 0-Termination
//do something...
//do something end.
delete val2;
// ...
}
解决办法
在C++中new 和 new [] 在释放的时候,需要使用一直的形式: delete 和 delete [].
也就是说:
- new创建的是普通对象,则使用delete进行释放;
- new创建的是数组对象,即new ClassName[N],在释放时,这需要使用delete [];
所以,修复以上问题,只需要将 delete val2; 修改为 **delete [] val2; **即可。
另外,添加环境变量ASAN_OPTIONS可以屏蔽cppcheck,也就不会报这个错误了
export ASAN_OPTIONS=alloc_dealloc_mismatch=0
但还是应该从内存泄漏着手去修改,不推荐设置环境变量屏蔽cppcheck。
更新于:3个月前赞一波!
相关文章
- 【说站】java中HttpClient的错误处理
- PHP程序员经常碰到的11个MySQL错误
- uniapp 微信小程序 控制台警告和错误处理
- EasyWeChat 生成小程序码报错 cURL错误 60
- 微擎后台登陆:输入密码错误次数超过5次,请在1小时后再登录
- apache常见错误:VC运行库(找不到 VCRUNTIME140.dll)
- 使用Python的错误计算器
- Python 错误类型
- git push时报remote rejected shallow update not allowed 的问题
- 修复 Ubuntu 上“E: 无法找到软件包”错误的 5 种方法
- 整数向下转型在运行时遇到错误
- Linux编译内核模块时报: linux/scripts/recordmcount: No such file or directory
- 编译Linux内核模块时报:WARNING: Symbol version dump "Module.symvers" is missing.
- git RPC failed; curl 18 transfer closed with outstanding read data remaining 是什么错误?
- QT编译时报错 error: lnk1158: cannot run 'rc.exe'
- linux中Qt编译时报错:qwt_dial.h: No such file or directory
- gcc或g++编译链接时报undefined reference to “xxx”
- 自建的nuget Server推送时报错:Response status code does not indicate success: 406 (Not Acceptable)
- linux中gcc/g++编译时报错 fatal error: codecvt: No such file or directory
- qt creator编译时出现了错误:error: LNK1181: cannot open input file 'debug\main.obj'
文章评论
评论问答