删除后动态数组中的 C++ 内存

C++ memory in dynamic array after delete

。下图描述了删除前和删除后的内存。我想知道为什么我仍然看到某种内存地址。我的问题是:它是由编译器引起的还是我在释放内存时做错了什么。

代码片段:

__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;

释放指针指向的内存既不会导致指针设置为空,也不会导致释放的内存归零。

解除分配仅意味着您告诉(系统)分配器您不再使用该内存并且它可以将其用于其他分配请求。分配器不需要以任何方式修改内存。

取消引用指向您通过调用 delete[] 释放的内存的指针会导致未定义的行为。这并不意味着您会观察到任何特定行为,而是意味着任何事情都可能发生。它可以例如碰巧 delete 对您的程序的内存没有影响,但仍然不允许您继续使用它。