c++ - 对于 C/C++ 中的数组分配,这些额外的代码是否需要没有错误?

标签 c++ c pointers memory-leaks

对于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/

相关文章:

c++ - 'Natural Size' 在 C++ 中的真正含义是什么?

有人可以解释一下为什么我对以下代码得到两个不同的答案吗?

c - 程序不返回 float 并根据使用的编译器给出不同的结果?

c - 指针字符串

c++ - Qt 和 C++ 在没有科学记数法的情况下显示来自 MySQL 的大 DECIMAL 数

c++ - 为什么 g++ 在启用 `-fpic` 的情况下不发出与构造函数相关的 noexcept 警告?

c++ - 将动态分配的指针数组调整为类

c - 如何在运行时将任何类型存储在 void* 中?

c - 打印 '.' 之后的每个字母,例如如果我输入 a..bcde..fg..h,程序将打印 bfh

C - 当循环条件为 ptr != NULL 时出现段错误