小编Suo*_*Suo的帖子

为什么此代码的结果在使用和不使用“-fsanitize=undefined,address”时会有所不同?

我发现这段代码使用“-fsanitize=undefined,address”和不使用它会产生不同的结果。

int printf(const char *, ...);
union {
  long a;
  short b;
  int c;
} d;
int *e = &d.c;
int f, g;
long *h = &d.a;
int main() {
  for (; f <= 0; f++) {
    *h = g;
    *e = 6;
  }
  printf("%d\n", d.b);
}
Run Code Online (Sandbox Code Playgroud)

命令行是:

$ clang -O0 -fsanitize=undefined,address a.c -o out0
$ clang -O1 -fsanitize=undefined,address a.c -o out1
$ clang -O1 a.c -o out11
$ ./out0
6
$ ./out1
6
$ ./out11
0
Run Code Online (Sandbox Code Playgroud)

Clang 版本是:

$ …
Run Code Online (Sandbox Code Playgroud)

c clang

5
推荐指数
1
解决办法
94
查看次数

标签 统计

c ×1

clang ×1