c - 分配失败时释放多维数组

标签 c malloc free calloc

假设我分配了一个二维数组:

int main(void)
{
        long int **arr;
        int i;
        int j;

        arr = calloc(2, sizeof(long int *));
        if (!arr) {
                exit(EXIT_FAILURE);
        }

        for (i = 0; i < 2; i++) {
                arr[i] = calloc(10, sizeof(long int));
                if (!arr[i]) {
                        for (j = i; j > 0; j--) {
                                free(arr[j]);
                        }
                        free(arr);
                        exit(EXIT_FAILURE);
                }
        }
}

如果内存分配失败,我是否应该在测试条件中包含 free() 循环

if (!arr[i]) {
        for (j = i; j > 0; j--) {
                free(arr[j]);
        }
        free(arr);
        exit(EXIT_FAILURE);
}

或者当我不希望程序继续运行时,通常仅exit() 就足够了吗?

if (!arr[i]) {
        exit(EXIT_FAILURE);
}

最佳答案

由于您是在分配失败的情况下退出程序,因此这样做没有坏处。您可以使用第二个片段。


C 不直接支持错误处理,即异常处理。在 MSVC 上你可以试试这个(注意这不是 C 标准的一部分):

void exceptionExample() {
    int *p = NULL;
    __try {
        p = (int*)malloc(sizeof(int));
        *p = 5;
        printf("%d\n",*p);
    }
    __finally {
        free(p);
    }
}  

建议阅读:C Programming/Error handling , Error handling in C .

关于c - 分配失败时释放多维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31145832/

相关文章:

Code_Cave 示例 C 编程

c - AVR USART通讯

C - 如何释放在其节点中具有链表的链表?

c - 在这种情况下如何正确释放双指针的内存?

c - 如何在不使用正则表达式的情况下提取 C 字符串中双引号之间的文本?

c - 为什么循环会这样工作?

c - 将字符串数组传递给函数

c - 如何释放前缀树中的内存? (美国标准 C)

c - 在此代码片段中,realloc 做了什么?

Cunit 测试可用内存两次