提问人:AhmetPesli 提问时间:8/26/2023 最后编辑:Jonathan LefflerAhmetPesli 更新时间:8/27/2023 访问量:66
我应该把“free(BlockOfMemory)”放在这段代码的什么位置?
Where should I put "free(BlockOfMemory)" in this code?
问:
#include <stdio.h>
#include <stdlib.h>
int main() {
int *numbers = malloc(5 * sizeof(int));
// Speicherplatz auf 10 ints vergrößern
int *temp = realloc(numbers, 10 * sizeof(int));
if (temp != NULL) {
numbers = temp;
printf("Speicher erfolgreich vergrößert.\n");
} else {
// Fehlerbehandlung
printf("Speicher konnte nicht vergrößert werden.\n");
free(numbers);
return 1;
}
free(numbers);
return 0;
}
我想将我的存储从 5 个整数扩展到 10 个整数,只是为了练习。我不知道把电话“”放在哪里。free(numbers)
答:
1赞
Ted Lyngmo
8/26/2023
#1
您正在正确地释放它,就像您现在正在这样做一样。如果重新定位数据(通过返回一个不等于的指针来指示),它会自动 ,所以无论你调用多少次,你都应该只调用一次,就像你现在所做的那样。realloc
realloc
numbers
free(numbers)
realloc
free
1赞
Jonathan Leffler
8/27/2023
#2
稍微重新组织一下,你的代码可以这样读。它有一个对 的调用,这在某种程度上是有益的。free()
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int *numbers = malloc(5 * sizeof(int));
int *temp = realloc(numbers, 10 * sizeof(int));
int rc = EXIT_SUCCESS;
if (temp != NULL) {
numbers = temp; // Reassign numbers to point to the new data
printf("Speicher erfolgreich vergrößert.\n");
} else {
printf("Speicher konnte nicht vergrößert werden.\n");
rc = EXIT_FAILURE;
}
// If realloc succeeded, free the new value.
// If realloc failed, free the old value.
free(numbers);
return rc;
}
一旦调用并返回非空指针 in ,就不应再次尝试使用最初存储在 中的值。只有当返回空指针时,才应调用 .分配成功后,代码会将新指针复制到旧指针上,因此不会(滥用)使用旧值。realloc(numbers, new_size)
temp
numbers
realloc()
free(numbers)
因此,您的代码是正确的。
评论
0赞
AhmetPesli
9/25/2023
我只是想感谢你这个伟大而详细的回答。我忘了我问了这个问题,但现在我读了它,你准确地说出了我需要什么。
评论
free
malloc
realloc
calloc