使用 MinGW 4.6.2(4.7.x 似乎不是 sourceforge 上的“最新”,所以安装了这个)
void test(int *in)
{
*in = 0;
}
int main()
{
int dat;
test(dat);
return dat;
}
正如您可能知道的那样,这将在 ac 项目中发出警告。
dirpath\fileName.c|8|warning: passing argument 1 of 'test' makes pointer from integer without a cast [enabled by default]
和一个 c++ 项目中的 2 个错误。
dirpath\fileName.cpp|8|error: invalid conversion from 'int' to 'int*' [-fpermissive]|
dirpath\fileName.cpp|1|error: initializing argument 1 of 'void test(int*)' [-fpermissive]|
我的问题是,在以下两种情况下(在内存中)究竟发生了什么,假设-fpermissive
启用或编译为 ac 程序。
dat
未初始化并且程序继续(并且没有发生分段错误)。dat
被初始化为 42,并且程序继续(并且执行 seg-fault)。
为什么dat
未初始化会导致没有段错误(可能是偶然的?),而情况 2 会导致段错误(可能是试图将值分配给内存位置)?
好奇心:f
在-fpermissive
, flag 中代表什么?(似乎多余)