void go()
{
//{1}
char buffer[2];
gets(buffer);
//{2}
cout << allow;
}
我試圖運行2例上述過程:緩衝區溢出 - 變量的變化
-1st:我宣佈「INT允許;」在位置1
-2nd:我聲明「int allow;'在位置2
在這兩種情況下,當我試圖輸入字符串「123」(不帶引號)時,allow的值是51. 但是,當我閱讀有關內存佈局時,僅在第一種情況,堆棧中「允許」的位置在緩衝區之前,這意味着當字符串比緩衝區長時,「允許」的值被改變。
然後,我嘗試在兩個位置聲明「char sth [10]」。這一次,只有當我在第一個位置宣佈時,它的價值纔會改變。
任何人都可以解釋發生了什麼?
你設置允許任何其他值之前'得到...'? – Amit
不能保證變量如何根據聲明的位置在內存中進行佈局。 –
哇,你真的想要在應用程序級別檢測堆棧粉碎?無論如何,我第二次是Paul Tomblin的評論。 – balajeerc