【发布时间】:2021-10-14 03:44:23
【问题描述】:
我对 C 中的内存分配有一个非常基本的问题。 如果我写:
int* test;
test = malloc(5 * sizeof(int));
test[0] = 1;
test[1] = 2;
test[2] = 3;
test[3] = 4;
test[4] = 5;
test = realloc(test, 6 * sizeof(int));
我可以使用 realloc。如果我将测试定义为:
int test[5] = {1,2,3,4,5};
我无法对其调用 realloc。
这些语句之间的低级区别是什么? 我可以以某种方式重新分配测试 [5] 吗? 如何免费测试[5]?
我不知道在哪里可以找到答案,如果你能链接资源,我将不胜感激。
【问题讨论】:
-
因为
realloc只能使用动态分配的内存。第二个不是(它是静态的或自动的 - 取决于上下文) -
因为数组不是指针。
-
数组有固定的位置.. realloc 给你一个可能指向不同地址的指针
-
“我如何免费测试[5]?”你没有。你没有分配它,所以你不能释放它。编译器分配它,编译器分配的内存永远不会被释放。
-
一个例外是使用灵活的数组成员作为
struct中的最后一个成员。为结构分配内存,以包含所需的数组长度。