【发布时间】:2026-01-31 20:55:01
【问题描述】:
我试图创建一个可以在程序运行时调整大小的数组。我已经了解了 malloc 和 realloc 函数,但显然我弄错了。这是我编写的函数,它根据循环次数创建一个数组。
int* flexibleArray() {
int *arrayFlex = NULL;
int number=0, cnt=0;
while (number!=-1) {
printf("\nInsert the variable: ");
scanf("%d", &number);
if (number==-1){
break;
}
cnt+=1;
arrayFlex = realloc(arrayFlex, cnt * sizeof(int));
arrayFlex[cnt-1] = number;
}
return arrayFlex;
}
我尝试阅读在互联网上找到的有关它的文档,但在重新分配后我无法检索新数组。
int *array;
array = flexibleArray();
int arraySize = (sizeof(array))/(sizeof(int));
for(int i=0; i<arraySize; i++) {
printf("%d ", array[i]);
}
基本上这是我测试函数的地方,看看它是否能做它应该做的事情。
我是 C 新手,对不起。 谢谢
【问题讨论】:
-
... 是有效的,虽然在这里没用。
-
你的函数(仍然)被声明为返回一个
int,而你似乎希望它返回一个指针。 -
如果你想返回
int *,那么就这样做(并声明)。而且,当指针尚未初始化时,您修改后的代码会尝试realloc()指向的空间arrayFlex。目前还不清楚你为什么要接受它作为参数——我只是把它变成一个局部变量,适当地初始化为NULL。 -
这个:
int arraySize = (sizeof(array))/(sizeof(int));没有做你认为的事情。 (它最有可能做的是总是返回 2。在任何给定平台上,它总是返回相同的小数字,通常是一两个。)没有办法让 C 告诉你动态调整大小的数组的当前大小,所以你必须返回大小和指针。 -
关于编辑:
int flexArray = NULL缺少分号并且名称错误。