我已经在Visual Studio中为我的项目启用了Address Sanitizer,并在Microsoft Learn中的以下代码上成功地测试了它。
#include <stdio.h>
int x[100];
int main() {
printf("Hello!\n");
x[100] = 5; // Boom!
return 0;
}
但是,清理程序无法在以下代码中找到缺失的delete语句:
struct Object {
int x;
int y;
};
int main() {
Object* obj = new Object();
// Boom!
return 0;
}
查看生成的程序集,我们可以看到new操作符确实被调用了,并且没有被优化掉。以下输出取自Debug/x86配置,但类似的输出可以从Debug/x64、Release/x86和Release/x64配置中获得。
; 6 : int main() {
push ebp
mov ebp, esp
sub esp, 12 ; 0000000cH
mov ecx, OFFSET __62A33F1D_Source@cpp
call @__CheckForDebuggerJustMyCode@4
; 7 : Object* obj = new Object();
push 8
call ??2@YAPAXI@Z ; operator new
地址过滤器能检测到这种类型的错误吗?如果能,我怎样才能成功地检测到错误?
1条答案
按热度按时间v1uwarro1#
Microsoft地址清理程序不检测内存泄漏。请参阅链接的page的第二个注解。
...请向我们发送有关您希望在未来版本中看到的内容的反馈。您的反馈有助于我们为将来的其他杀毒软件确定优先级,例如
/fsanitize=thread
、/fsanitize=leak
、/fsanitize=memory
...