【发布时间】:2015-12-07 18:54:55
【问题描述】:
我在 Ubuntu 14.04 上使用带有 Clang 3.7.0 的 Memory Sanitizer。以下代码可以完美运行:
#include <cstdio>
int main() {
double ans;
printf("Hello World: %f\n", ans);
return 0;
}
编译时使用
clang++ -g -O1 -fsanitize=memory -fsanitize-memory-track-origins=2 -fomit-frame-pointer sanitize.cpp -o sanitize
我期待一个错误。 Memory Sanitizer 没有捕捉到 ans 未初始化的事实吗?
感谢您的帮助。
【问题讨论】:
-
尝试将 ans 更改为 char*!
-
由于明显缺乏任何研究而被否决。
-
我很惊讶编译器本身没有抱怨。我知道编译器不能通过静态分析来捕捉每一个这样的情况,但它应该能够捕捉到这样的简单化。
-
@AdrianMcCarthy GCC 和 Clang do 抱怨 if 你打开警告(例如使用
-Wall,这个特定的由控制-Wuninitialized),这是 OP 没有做的。 -
你试过 -fsanitize=address 吗?