我应该在 C 中的二维数组的 malloc 和 calloc 之后检查 NULL 指针吗?

Should I check for NULL pointer after malloc and calloc of 2D array in C?

好的,我承认我应该在 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);
}

您确实需要检查 calloc 的 return 值(如果无法分配内存,它将是 NULL),但请注意调用 free NULL 指针是空操作,因此本身没有立即内存泄漏。

当然,在遇到 NULL return 后进行清理时,您需要对所有来自成功 NULL 的非 NULL 指针调用 free =10=]来电。就个人而言,我也会在行分配上调用 calloc 以使该过程更简单。

我想你不明白calloc是什么。

逻辑等价物:

void *mycalloc(size_t num, size_t size)
{
    size_t total = size * num;
    void *ptr = malloc(total);
    if(ptr)
    {
        memset(ptr, 0, total);
    }
    return ptr;
}

您需要检查内存的分配方式是否与使用 malloc 时的方式完全相同。