Память C ++ в массиве Dynami c после удаления - PullRequest
0 голосов
/ 18 января 2020

enter image description here. Следующая фотография описывает память до удаления и после удаления. Мне интересно, почему я до сих пор вижу какой-то адрес памяти. Мой вопрос: это вызвано компилятором или я что-то сделал не так во время освобождения памяти.

Фрагмент кода:

__int16** Matrix{};
size_t width{ 35 };
size_t height{ 4 };
Matrix = new __int16* [height];
for (size_t i = 0; i < height; ++i)
{
    Matrix[i] = new __int16[width];
    for (size_t j = 0; j < width; ++j)
    {
        Matrix[i][j] = NULL;
    }
};
//DEALLOCATE ALLOCATED MEMORY
for (size_t i = 0; i < height; ++i)
{
    delete[] Matrix[i];
}
delete[] Matrix;

1 Ответ

3 голосов
/ 18 января 2020

Выделение памяти, на которую указывает указатель, не приводит к обнулению указателя и не приводит к обнулению выделенной памяти.

Выделение означает только то, что вы сообщаете (системе) распределитель, что вы больше не используете эту память и что он может использовать ее для других запросов выделения. Распределитель не должен каким-либо образом изменять память.

Разыменование указателя, который указывает на память, которую вы освободили при вызове delete[], вызывает неопределенное поведение. Это не значит, что вы будете наблюдать какое-то конкретное поведение, это значит, что все может случиться. Например, может случиться так, что delete не повлияет на память вашей программы, но это по-прежнему не позволяет вам продолжать его использовать.

...