#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)
”。
您正在正确地释放它,就像您现在所做的那样。如果
realloc
重新定位数据(由 realloc
返回不等于 numbers
的指针表示),它将自动 free(numbers)
,所以无论你调用 realloc
多少次,你应该只调用 free
一次,就像你现在所做的那样。
稍微重新组织一下,你的代码可以像这样读。它只调用一次
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;
}
一旦调用
realloc(numbers, new_size)
并且它在 temp
中返回非空指针,您就不应该再次尝试使用最初存储在 numbers
中的值。仅当 realloc()
返回空指针时才应调用 free(numbers)
。当分配成功时,您的代码将新指针复制到旧指针上,因此您不会(ab)使用旧值。
因此,您的代码是正确的。