void go()
{
//{1}
char buffer[2];
gets(buffer);
//{2}
cout << allow;
}
Я попытался запустить описанную выше процедуру в 2-х случаях:переполнения буфера - Изменения переменных
-1st: Я объявляю «ИНТ позволяет;» в позиции 1
-2nd: Я объявляю «int allow;»; в позиции 2
В обоих случаях, когда я попытался ввести строку «123» (без кавычек), значение allow было равно 51. Однако, когда я прочитал о макете памяти, только в первом случае , позиция «allow» в стеке находится перед буфером, что означает, что, когда строка длиннее буфера, изменяется значение «allow».
Затем я попытался объявить «char sth [10]» в обоих положениях. На этот раз, только когда я объявил sth в первой позиции, значение было изменено.
Может ли кто-нибудь объяснить, что произошло?
Установили ли вы позволить в любое другое значение, прежде чем '' получает ...? – Amit
Нет никакой гарантии, как переменные выложены в памяти на основе того, где они объявлены. –
Ничего себе, вы на самом деле пытаетесь обнаружить разбивку стека на уровне приложения? В любом случае, второй комментарий Пола Томблина выше. – balajeerc