我应该在 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 时的方式完全相同。
好的,我承认我应该在 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 时的方式完全相同。