我讀計算機系統:一個程序員的角度來看,我遇到下列C文件傳來:ÇLD鏈接時錯誤
foo.c的:
void f(void);
int x = 15213;
int y = 15212;
int main()
{
f();
printf("x = 0x%x y = 0x%x \n", x, y);
return 0;
}
Bar.c :
double x;
void f()
{
x = -0.0;
}
被編譯用gcc -o foobar的foo.c的bar.c並給出以下輸出:
x = 0x0 y = 0x80000000
哇。因此,由於int是4字節,double是8字節(無論如何,我的系統上),而x的強符號在Foo.c中,所以x被指定爲-0.0的十六進制表示,從而也會覆蓋y!
所以我想了解更多。標準C型保護措施如何在這裏不起作用? 0x0000000080000000被盲寫到EL存儲在哪裏,並且y恰好在它旁邊並被覆蓋?隨意儘可能詳細。
%x用於顯示組成x和y的字節。重點是y被覆蓋。嘗試使用%d或其他。 – JamesLens 2015-04-06 12:56:21
@JamesLens檢查編輯 – Gopi 2015-04-06 13:28:46