【发布时间】:2020-12-06 12:11:45
【问题描述】:
我正在努力避免内存不足,我需要了解是否需要将 nullpointer 设置为我的
删除数组后的多维动态数组。这是我的代码。
int*** arr = new int** [lists];
for (int i = 0; i < lists; i++)
{
arr[i] = new int* [row];
for (int r = 0; r < row; r++)
{
arr[i][r] = new int[col];
}
}
for (int i = 0; i < lists; i++)
{
for (int r = 0; r < row; r++)
{
for (int z = 0; z < col; z++)
{
arr[i][r][z] = rand() % 100;
}
}
}
for (int i = 0; i < lists; i++)
{
for (int r = 0; r < row; r++)
{
delete[] arr[i][r];
}
delete[] arr[i];
}
delete[] arr;
arr = nullptr;
【问题讨论】:
-
newed 的任何内容都应为deleted。 -
“我正在努力避免内存泄漏”,因此请使用智能指针和/或容器。避免原始的拥有指针。
-
不,您不需要
arr = nullptr;以避免内存泄漏。将其设置为nullptr的唯一原因是您稍后出于某种原因检查它 (if(arr) ...)。 -
这不是必要的,如果你不为空指针不会有任何内存泄漏,但它会使其处于“悬空”状态。如果你不再使用它,那很好。如果有可能再次使用,最好设置为
nullptr。
标签: c++ arrays multidimensional-array stl