我应该在这段代码中放置“free(BlockOfMemory)”吗?

问题描述 投票:0回答:2
#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)
”。

c malloc free sizeof realloc
2个回答
1
投票

您正在正确地释放它,就像您现在所做的那样。如果

realloc
重新定位数据(由
realloc
返回不等于
numbers
的指针表示),它将自动
free(numbers)
,所以无论你调用
realloc
多少次,你应该只调用
free 
一次,就像你现在所做的那样。


0
投票

稍微重新组织一下,你的代码可以像这样读。它只调用一次

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)使用旧值。

因此,您的代码是正确的。

© www.soinside.com 2019 - 2024. All rights reserved.