首页 > 解决方案 > 我应该在 C 中二维数组的 malloc 和 calloc 之后检查 NULL 指针吗?

问题描述

好的,我承认我应该在 malloc 时检查 NULL 指针,但是 calloc 呢?是否存在内存泄漏?

int **initializeMatrix(int *rows, int *cols) {
    int **matrix = malloc((*rows) * sizeof(int*));
    checkNullPointer(matrix);
    for(int i = 0; i < *rows; i++) {
        matrix[i] = calloc(*cols, sizeof(int));
    }

    return matrix;
}

void checkNullPointer(int **ptr) {
    if (ptr == NULL)
        printErrorMessage(memoryErrorMessage, 101);
}

标签: cmultidimensional-arraymemory-leakscallocnull-pointer

解决方案


您确实需要检查callocNULL如果无法分配内存)的返回值,但请注意,调用free指针NULL是无操作的,因此本身不会立即发生内存泄漏。

当然,在遇到NULL返回后进行清理时,您需要调用成功调用产生的free所有非指针。就我个人而言,我也会呼吁行分配以使该过程更简单。NULLcalloccalloc


推荐阅读