指针指向一个内存块的指针,哪个指针应该被释放?

时间:2014-06-23 19:25:52

标签: c malloc free realloc pointer-to-pointer

在下面代码的末尾,我需要将哪个指针插入free(),array或temp_array?是哪一个或者要释放内存块是否重要?

int *array = 0;
int *temp_array = 0;
int count = 0;

array = malloc(sizeof(int));

// skipping code where count is calculated...

temp_array = realloc(array, count * sizeof(int));

if (temp_array == NULL) {
    free(array);
    // some error message
    return;
}
array = temp_array;

// skipping section of code, which reads numbers from a file and loads them into an array
// amount of numbers read can be 0 to whatever

free (array); // free array or temp_array?

此外,如果它试图为内存分配的指针是NULL,是否可以使用realloc分配一块内存(换句话说,我是否需要先使用malloc分配内存,然后再调整大小realloc,还是我可以跳过malloc)?

1 个答案:

答案 0 :(得分:0)

没关系 - temp_arrayarray都指向同一个内存块。我更喜欢temp_array,因为realloc和free指针匹配。根据您的工作代码,为了保护您可以考虑将两个指针分配给NULL以防止两次释放内存。 free(NULL)是安全的 - 不执行任何操作。

关于一个整数的初始分配 - 这是必要的吗?从显示的代码中,最好在堆栈上定义一个int。

修改 在OP的更多信息(在注释中)之后,似乎可以使用包含文件中记录数的标题值来简化代码。这消除了重新分配的需要,并允许在读取文件值之前分配内存。