错误:alloc-dealloc-mismatch
地址擦除系统错误:分配 API 与解除分配 API 之间不匹配
默认情况下,AddressSanitizer 中的 alloc
/dealloc
不匹配功能在 Windows 中处于禁用状态。 若要启用它,请在运行程序之前先运行 set ASAN_OPTIONS=alloc_dealloc_mismatch=1
。 此环境变量会在运行时进行检查,以报告 malloc
/delete
、new
/free
和 new
/delete[]
相关错误。
示例
// example1.cpp
// alloc-dealloc-mismatch error
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[]) {
if (argc != 2) return -1;
switch (atoi(argv[1])) {
case 1:
delete[](new int[10]);
break;
case 2:
delete (new int[10]); // Boom!
break;
default:
printf("arguments: 1: no error 2: runtime error\n");
return -1;
}
return 0;
}
若要生成并测试此示例,请在 Visual Studio 2019 版本 16.9 或更高版本的开发人员命令提示符中运行以下命令:
cl example1.cpp /fsanitize=address /Zi
set ASAN_OPTIONS=alloc_dealloc_mismatch=1
devenv /debugexe example1.exe 2
生成的错误
另请参阅
AddressSanitizer 概述
AddressSanitizer 已知问题
AddressSanitizer 生成和语言参考
AddressSanitizer 运行时参考
AddressSanitizer 阴影字节
AddressSanitizer 云或分布式测试
AddressSanitizer 调试程序集成
AddressSanitizer 错误示例