遵循以下代码:
#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的情况下,默认情况下是否分配了内存?
答案 0 :(得分:4)
您可能会对未初始化的数据感到幸运,或者您的编译器正在优化指针。
当你用这样的东西做
int *a;
*a = 9;
printf("%d\n", *a);
编译器可以将其转换为
puts("9");
因为它可以知道并看到所有值。
这可能就是您的函数调用版本崩溃的原因。因为编译器必须生成可以被其他代码模块调用的函数。
根据编译器,编译器版本以及分配给编译器的标志,这种情况会有很大不同。