Не очищается память массива

int* a[6];
a[0] = new int;
delete[]a;

Почему выскакивает исключение? "Test_proj.exe вызвал срабатывание точки останова"


Ответы (2 шт):

Автор решения: zurn

Правильно будет:

int* a;
a = new int(6);
delete[]a;
→ Ссылка
Автор решения: Harry

В самом деле, почему?

Давайте посмотрим вместе.

int* a[6];

В стеке (не в динамической памяти! менеджер памяти тут ни при чем, память освободится автоматически при выходе a из области видимости) выделено место под массив из 6 указателей.

a[0] = new int;

В первый элемент массива записывается адрес одной переменной типа int, для которой выделено место в динамической памяти.

delete[]a;

Вы пытаетесь освободить память для всего массива - к которому, как уже было сказано, менеджер памяти отношения не имеет, так как массив находится в совсем другой памяти. Т.е. в рамках данной модели вы пытаетесь сдать в прокат собственный автомобиль, который вы в прокате не брали :)

И еще - что вы понимаете под "очистить массив" (в названии вопроса)? Может, вы хотите вообще не освободить память, а, например, обнулить его значения? Уточните этот момент.

→ Ссылка