繁体   English   中英

动态数组使用malloc和realloc?

[英]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 docsrealloc返回指针,您可以将其直接存储在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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM