Вопрос, с которым вы связались, обрабатывает переменные исключительно с локальным сроком хранения, поэтому я полагаю, что вы также обращаетесь к ним.
Такие переменные не инициализируются, если вы сами этого не делаете, поэтому они получают значение того, что было записано в их ячейке памяти ранее (стандартная формулировка: их значение равно «undeterminate») & ndash; однако ничто не говорит против того, что эта память уже равна нулю & ndash; по чистой случайности!
Вы можете попробовать следующее:
void test()
{
int* p; // uninitialized
std::cout << p << std::endl; // undefined behaviour!!!
// (that's what you most likely did already...)
// now something new: change the memory...
p = reinterpret_cast<int*>(static_cast<uintptr_t(0xaddadaad));
}
int main()
{
test();
// again something new: call it a SECOND time:
test();
}
Поскольку это неопределенное поведение, нет никаких гарантий, что вы получите какой-либо значимый вывод & ndash; Скорее всего, однако, что память первого вызова функции используется повторно во втором, и вы могли бы получить выходные данные, изменяющие порядок на следующее:
00000000
addadaad
Таким образом, даже если произошло, что полностью запустил нулевую память при запуске программы, это может отличаться от этого в более поздний момент, когда ваша программа работает ...