AFAIK, переменные, объявленные в стеке, живут только до тех пор, пока не закончится текущая область, то есть, в основном, до следующего }
. Однако давайте возьмем этот пример:
int main() {
int* ptrOne;
{
int intOne = 1;
ptrOne = &intOne;
}
int intTwo = 9;
std::cout << *ptrOne;
}
Когда объявлено intTwo
, intOne
уже выходит за рамки. Это больше не доступно и должно быть перезаписано. Тем не менее, cout
все еще работает и выдает 1
. В представлении памяти я вижу, что 1 все еще существует, с 9 записанными за ним несколько байтов. Почему? (Я использую Visual Studio 2019 с MSV C)