小编Tal*_*mon的帖子

不同的输出调用malloc on clang应用编译器选项-00 vs -03

以下代码运行编译器选项-O3vs -O0结果不同的输出:

#include <stdlib.h>
#include <stdio.h>

int main(){
   int *p = (int*)malloc(sizeof(int));    
   int *q = (int*)realloc(p, sizeof(int));

   *p = 1;
   *q = 2;

   if (p == q)
     printf("%d %d", *p, *q);

   return 0;
}
Run Code Online (Sandbox Code Playgroud)

我对结果感到非常惊讶.

用clang 3.4,3.5编译(http://goo.gl/sDLvrq)

  • 使用编译器选项-O0- 输出:2 2

  • 使用编译器选项-O3- 输出:1 2

这是一个错误吗?

有趣的是,如果我稍微修改代码(http://goo.gl/QwrozF),它的行为与预期一致.

int *p = (int*)malloc(sizeof(int));    
*p = 1;
Run Code Online (Sandbox Code Playgroud)

在gcc上测试似乎工作正常.

c c++ gcc clang

3
推荐指数
1
解决办法
297
查看次数

标签 统计

c ×1

c++ ×1

clang ×1

gcc ×1