使用MinGW 4.6.2(4.7.x似乎並沒有成爲SourceForge上的「最新」,所以這一塊得到了安裝)在這兩個例子中,內存中發生了什麼?
void test(int *in)
{
*in = 0;
}
int main()
{
int dat;
test(dat);
return dat;
}
正如你可能知道這會給在C項目的警告。
dirpath\fileName.c|8|warning: passing argument 1 of 'test' makes pointer from integer without a cast [enabled by default]
而且2個錯誤的C++項目。
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
啓用或編譯的C程序。
dat
未初始化並且程序繼續進行(並且沒有發生分段錯誤)。dat
初始化爲42,並且程序繼續進行(並確實發生分段錯誤)。
爲什麼離開dat
初始化導致了沒有賽格故障(也許是偶然?),而情況2導致賽格故障(可能是試圖將一個值賦給一個內存位置)?
好奇心:f
代表什麼-fpermissive
,旗或許? (似乎是多餘的)
如果這個問題有什麼問題,請留下我對它如何改進的評論。謝謝。 – Leonardo