【发布时间】:2019-11-25 18:02:27
【问题描述】:
好的,我承认我应该在 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 不同?
-
没有人谈论它。当你调用内存时,它被设置为某个值,而当你分配内存时,内存被保留以供使用不是吗?
-
检查
malloc的返回值及相关与内存泄漏无关。您检查它返回的指针以查看操作是否成功。 -
@P__J__:你什么?
free(NULL)自 ANSI C 以来已被定义为无操作。 -
请注意,您没有分配二维数组。您正在将一个指针数组分配给多个完全独立的一维数组。这是一种非常低效的内存分配方式,尤其是对于二维以上的“数组”。见stackoverflow.com/questions/42094465/…
标签: c multidimensional-array memory-leaks calloc null-pointer