Почему указатель после очищения памяти меняет место на которое указывает VS
Не понимаю одну вещь: почему после очищения памяти, на которую указывает указатель, указатель начинает указывать на другой адрес в памяти. Причём это происходит только в Visual Studio, в Code Blocks указатель не меняется. Вот код:
int main()
{
int* ptr = new int;
cout << ptr << '\n';
delete ptr;
cout << ptr << '\n';
return 0;
}
Вывод в Visual Studio:
011C0550
00008123
Вывод в Code Blocks:
0x1e1750
0x1e1750
Ответы (1 шт):
Забавно, он кидает на данный адрес и разные типы указателей после удаления. Похоже это сделано или для того что бы можно было любой указатель сверить с данным адресом (00008123) и узнать удалялась ли память указателя ранее, либо при обращении к этой памяти что бы во всех случаях выбилось одно и то же исключение и код ошибки ( у меня -1073741819). Так что зря закидали комментатора выше, это оптимизации VS судя по всему.