。下图描述了删除之前和删除之后的内存。我想知道为什么我仍然看到某种内存地址。我的问题是:这是由编译器引起的还是在释放内存时发生了错误。
代码段:
__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;
释放指针所指向的内存既不会导致将指针设置为null,也不会导致被释放的内存被清零。
释放仅表示您告诉(系统)分配器您不再使用该内存,并且可以将其用于其他分配请求。分配器不需要以任何方式修改内存。
取消引用指向通过调用delete[]
释放的内存的指针会导致未定义的行为。这并不意味着您将观察到任何特定的行为,这意味着任何事情都可能发生。它可以例如delete
对程序的内存没有影响,但是仍然不允许您继续使用它。