[英]Dynamic array using malloc and realloc?
我正在尝试一一收集输入整数。 我的数组从大小1开始,我想在收集到的每个输入中将其扩展为1(这是一件很聪明的事情吗?)
无论如何,这是我设法提供的代码,但是没有按预期工作。
在此过程之后,sizeof(array)始终返回8,我认为这意味着该数组仅被调整一次大小。 (sizeof(int)是4位)
尝试输出数组会导致第一个输入变量的多个实例。
输出代码
for(int s=0;s<sizeof(array)/sizeof(int);s++){
printf("%i\n",array[i]);
}
原始代码:
int i;
int size = 1;
int *array = malloc(size * sizeof(int));
int position = 0;
do{
i = getchar() - 48;
f (i != -16 && i != -38 && i != 0) {
array[position] = i;
position++;
size++;
*array = realloc(array, size * sizeof(int));
}
} while (i != 0);
更新后仍无法正常工作的代码
int i;
int size = 1;
int *array = malloc(size * sizeof(int));
int position = 0;
do{
i = getchar() - 48;
f (i != -16 && i != -38 && i != 0) {
array[position] = i;
position++;
size++;
array = realloc(array, size * sizeof(int));
}
} while (i != 0);
array = realloc(...)
不是*array
。 根据realloc docs , realloc
返回指针,您可以将其直接存储在array
指针中。
编辑让您的生活更轻松的一件事:使用char
常量而不是原始数字。 例如,
i = getchar();
if(i != ' ' && i != '\n' && i != '0') {
/* 48-16 48-38 48-0 right? */
array[position] = i - '0'; /* '0' = 48 */
跳到我身上的一件事:在循环中,此行:
*array = realloc(array, size * sizeof(int));
相反,应为:
array = realloc(array, size * sizeof(int));
在原始版本中,您通过先取消引用指针将realloc
的结果粘贴在数组的第一个元素中。 没有星号,您将重新分配数组本身。
(从我的评论中复制粘贴:) sizeof(array)
返回8,因为它等于sizeof(int*)
( array
类型为int*
),后者为8(您可能将其编译为64位)。 sizeof
对您如何看待指向数组的指针不起作用。
同样,出于相同的原因,您的输出代码是错误的。 您只打印前两个元素,因为sizeof(array)/sizeof(int)
始终为sizeof(array)/sizeof(int)
8/4=2
。 它应该是
for(int s=0;s<size;s++){
printf("%i\n",array[s]);
}
(还要注意将索引变量i
更改为s
),其中size
是您其他代码块中的变量。 如果数组是使用指针动态分配的,则无法从sizeof
找到数组的长度。 这不可能。 您的代码必须“记住”数组的大小。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.