我在执行此未分配的指针解引用时遇到典型错误

时间:2018-06-29 19:38:00

标签: c

遵循以下代码:

#include<stdio.h>
void function ();
int main()
{
   int * a;
   *a=9;//this is supposed to give error as I am trying to 
            // dereference an unallocated pointer
           // but it does not
   printf("%d",*a);
   function();
  }
  void function()
  {
        int * a;
         *a=9;//this gives an error as I am trying to 
            // dereference an unallocated pointer
           printf("%d",*a);
           return;
     }

输出为9,然后程序崩溃... 为什么? main()和function()的区别 对于main(),我们声明一个指针类型,然后在不使用calloc或malloc的情况下,默认情况下是否分配了内存?

1 个答案:

答案 0 :(得分:4)

您可能会对未初始化的数据感到幸运,或者您的编译器正在优化指针。

当你用这样的东西做

int *a;
*a = 9;
printf("%d\n", *a);

编译器可以将其转换为

puts("9");

因为它可以知道并看到所有值。

这可能就是您的函数调用版本崩溃的原因。因为编译器必须生成可以被其他代码模块调用的函数。

根据编译器,编译器版本以及分配给编译器的标志,这种情况会有很大不同。