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

问题描述 投票:0回答:1

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;
c++ memory new-operator
1个回答
0
投票

释放指针所指向的内存既不会导致将指针设置为null,也不会导致被释放的内存被清零。

释放仅表示您告诉(系统)分配器您不再使用该内存,并且可以将其用于其他分配请求。分配器不需要以任何方式修改内存。

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

© www.soinside.com 2019 - 2024. All rights reserved.