c++ - 应用编译器选项 -00 与 -03 在 clang 上调用 malloc 的不同输出

标签 c++ c gcc clang

以下代码运行编译器选项 -O3-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;
}

我对结果感到非常惊讶。

使用 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;

在 gcc 上测试它似乎工作正常。

最佳答案

realloc之后,p不再有效。

关于c++ - 应用编译器选项 -00 与 -03 在 clang 上调用 malloc 的不同输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29440999/

相关文章:

c++ - 为构造函数类中给定的参数分配内存

C 随机数

C api同时兼容32位和64位整数

c - 这段代码有什么问题,我不能将指针和无符号值加在一起吗?

c - 有没有办法在运行时修改 Linux C 程序中的函数代码?

c++ - 强制在堆栈中而不是全局分配 char[] (string)

c++ - sfml 2.0 中的速度和耗时

c++ - vector 查找错误:‘struct std::iterator_traits 中没有名为 ‘iterator_category’ 的类型

c - 为什么 GCC 说一个变量在未使用时未使用?

c++ - 访问 vector vector 元素时出现段错误