[英]Why can't I realloc an array that was fully initialized?
看看下面的一段代码。 当我用的malloc它阿婷空间创建一个数组,我可以随时调整阵列而不丢失数据。 但是当我通过使用int test2[] = {3};
完全初始化它来创建一个数组时int test2[] = {3};
我无力的realloc。 这是为什么? 这只是一个愚蠢的例子,但它提出了我面临的问题。
我尝试以不同的方式(*、&、** 等)引用test2 ,但在某些时候我发现自己只是希望神奇地找到解决方案而不知道我在做什么了。
我一直在谷歌上搜索很多,但我似乎无法找到对此或有效解决方案的正确解释。
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
int *test1 = malloc(1 * sizeof(int));
test1[0] = 1;
test1 = realloc(test1, 2 * sizeof(int));
test1[1] = 2;
for(int i = 0; i < 2; i++)
{
printf("%d\n", test1[i]);
}
int test2[] = {3};
test2 = realloc(test2, 2 * sizeof(int));
test2[1] = 4;
for(int i = 0; i < 2; i++)
{
printf("%d\n", test2[i]);
}
}
输出:
test.c: In function 'main':
test.c:17:8: error: assignment to expression with array type
test2 = realloc(test2, 2 * sizeof(int));
当我在第一个 for 循环后删除代码时,程序将按预期编译并很好地执行。
声明int test2[] = {3};
不会创建以后可以释放或重新分配的内存! 相反,它定义了一个固定长度的数组,很可能是在堆栈上“创建”的。
另一方面,调用malloc
从堆中分配请求的内存量(本质上是一个可供运行程序使用的大内存池); 这个内存“块”以后可以用realloc
重新调整大小,并且必须通过调用free
来释放(当你完成它时)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.