You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言代码中free(numbers)的正确放置位置咨询

关于realloc后free调用位置的解答

你当前代码里的free调用位置是完全正确的,下面给你拆解清楚逻辑:

核心逻辑说明

  • 当realloc成功时:
    temp指向扩容后的新内存块,原numbers指向的内存会被realloc自动回收(如果是异地扩容的情况),之后你将numbers指向temp,所以主函数末尾的free(numbers)就是释放这块新的扩容内存,完全符合内存管理要求。
  • 当realloc失败时:
    realloc返回NULL且不会释放原numbers的内存,这时候必须在错误分支里调用free(numbers),否则会造成内存泄漏,你的代码已经正确处理了这个场景。

代码小修正(换行符问题)

你代码里printf的字符串换行写法有误,修正后的完整代码如下:

#include <stdio.h>
#include <stdlib.h>

int main() {
    int *numbers = malloc(5 * sizeof(int)); 
    // 扩容到10个整数的存储空间
    int *temp = realloc(numbers, 10 * sizeof(int));
    if (temp != NULL) {
        numbers = temp;
        printf("内存扩容成功。\n");
    } else {
        // 错误处理
        printf("内存扩容失败。\n");
        free(numbers);
        return 1;
    }
    free(numbers);

    return 0;
}

关键注意事项

  • 绝对不要直接写numbers = realloc(numbers, ...):如果realloc失败返回NULL,你会丢失原内存的指针,导致内存泄漏,用临时指针temp接收返回值的做法非常正确。
  • 内存管理的核心原则:每一次成功的malloc/calloc/realloc(成功分配时)都要对应一次free,你的代码完全遵循了这个原则:
    • 扩容成功时:malloc的内存被realloc处理,最终free(numbers)释放新内存;
    • 扩容失败时:直接free(numbers)释放最初malloc的内存。

内容的提问来源于stack exchange,提问作者AhmetPesli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 14:32:14