gpt4 book ai didi

c - pointer to 一个指针,也就是指向一个内存块,应该释放哪个指针?

转载 作者:太空宇宙 更新时间:2023-11-04 04:42:43 24 4
gpt4 key购买 nike

在下面代码的末尾,我需要将哪个指针插入 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 分配一 block 内存(换句话说,我是否需要先使用 malloc 分配内存,然后使用 realloc 调整它的大小,或者可以我跳过 malloc)?

最佳答案

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

关于一个整数的初始分配——有必要吗?从显示的代码来看,在堆栈上定义的 int 会更可取。

编辑:在来自 OP 的更多信息(在评论中)之后,似乎可以使用包含文件中记录数的 header 值来简化代码。这消除了对 realloc 的需要,并允许在读取文件值之前进行内存分配。

关于c - pointer to 一个指针,也就是指向一个内存块,应该释放哪个指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24373774/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com