在下面代码的末尾,我需要将哪个指针插入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)?
答案 0 :(得分:0)
没关系 - temp_array
和array
都指向同一个内存块。我更喜欢temp_array
,因为realloc和free指针匹配。根据您的工作代码,为了保护您可以考虑将两个指针分配给NULL以防止两次释放内存。 free(NULL)
是安全的 - 不执行任何操作。
关于一个整数的初始分配 - 这是必要的吗?从显示的代码中,最好在堆栈上定义一个int。
修改强> 在OP的更多信息(在注释中)之后,似乎可以使用包含文件中记录数的标题值来简化代码。这消除了重新分配的需要,并允许在读取文件值之前分配内存。