【发布时间】:2018-03-24 14:21:22
【问题描述】:
指向未初始化内存的指针会导致错误。引用此类指针表示无效地址。
int *pi;
printf("%i\n",*pi);
以上代码导致使用未初始化变量错误。
error: ‘pi’ is used uninitialized in this function
但是,当首先打印地址时,指针似乎由有效地址初始化但填充了无效数据
int *pi;
printf("%p\n",&pi); //address printing
printf("%i\n",*pi);
打印出来的:
0x7ffeea9313c8 //valid virtual address
-125990072 //invalid data
问题:
运算符(&)的地址是否初始化了一个指针?如果不是,请纠正错误的理解。
【问题讨论】:
-
任何取消引用未初始化指针的尝试都是未定义的行为
-
@AndyG 所以这是由编译器决定的
-
编译器不需要在第一种情况下发出错误 - 事实上,它可以编译“正常”:godbolt.org/g/XBuK4P
标签: c++ c pointers address-operator