【发布时间】:2021-07-12 21:29:54
【问题描述】:
当我们创建一个未知大小的数组时,我们使用malloc() 函数。
这是我想从用户那里获取数组大小作为输入时的代码。
int* ptr, len;
printf("Please enter the size number:");
scanf_s("%d", &len);
ptr = (int*)malloc(len * sizeof(int));
for (int i = 0; i < len; i++)
{
printf("Enter the %d. number: ", i+1);
scanf_s("%d", ptr + i);
}
问题来了 我想构建一个应用程序,其中用户不指示任何大小值并输入数字,以便将它们放入数组中。数组正在填充,但没有任何限制。它最初没有像我上面的代码那样分配任何内存。唯一的限制是用户输入一个特定的数字(比如-5),然后阵列被停止。并打印出值。
本质上:我正在寻找内存分配,但分配将取决于特定的用户输入。
Realloc 编辑无限运行代码并且从不显示数组
int i = 0,ctr=0;
int* ptr = (int*)malloc(sizeof(int));
do
{
printf("Enter the %d. value: \n",i+1);
scanf_s("%d", ptr + i);
ctr += 1;
ptr = (int*)realloc(ptr, (i + 2) * sizeof(int));
i += 1;
} while (*(ptr+i)!=-1);
【问题讨论】:
-
您可以使用 realloc 重新分配一个数组。另一种方法是使用列表。但在最后一种情况下,您将只能按顺序访问列表中的元素。
-
我尝试使用 realloc 进行编程,但即使我给它一个条件,循环也会无限运行。
-
它无限期地运行,因为您的
while条件会查看尚未输入的数字,因为您在它之前增加了i。 -
考虑使用链表。
-
@EmanuelP 当我看到它时,我笑得很厉害。好的,谢谢先生。就是这样。
标签: arrays c loops dynamic-memory-allocation realloc