对于C/C++中的二维数组分配,最常见的代码是:
const int array_size = .. ;
array = (int**) malloc(array_size);
for (int c=0;c<array_size;c++)
array[c] = (int*) malloc(other_size);
但我认为我们应该这样写:
const int array_size = .. ;
array = (int*) malloc(array_size);
int c;
bool free_array = false;
for (c=0;c<array_size;c++) {
array[c] = (int*) malloc(other_size);
if(array[c] == NULL){
free_array = true;
break;
}
}
if(free_array) {
for (int c1=0;c1<c;c1++)
free(array[c1]);
}
以确保如果一次分配失败,我们将释放之前分配的内存。
我说得对吗?
注意:在 C++ 中,有一种使用智能指针和 STL 容器的替代安全方法,但我们在这里讨论原始指针或 C 指针。
最佳答案
一般来说,如果您检测到 malloc
失败,您唯一能做的就是 exit()
。那时,您无法安全地执行有关内存分配或释放的任何操作。
唯一的异常(exception)是,如果您处于无法选择退出的嵌入式环境中。在这种情况下,您可能不应该首先使用 malloc
。
关于c++ - 对于 C/C++ 中的数组分配,这些额外的代码是否需要没有错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39564381/