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
相关产品推荐
相关产品推荐

