C语言中没有上限的数组



我一直在努力思考一个我确信是可能的想法,我只是不确定我是否以正确的方式去做。我的意图是创建一个数组,然后用用户想要的尽可能多的值填充它。然而,我的目标是不使用任何定义值本身。我希望能够继续增加它可以无限地包含的值的数量。

这是我一直在使用的测试代码,试图找出这个问题:

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
        int i;
        int Up;
        int Ary[0];
        printf("Please enter the number of integers you want to input: ");
        scanf("%d", &Up);
        for(i = 0; i < Up; i++)
        {
                printf("Please enter a number: ");
                Ary[i] = (int) malloc(sizeof(int));
                scanf("%d", &Ary[i]);
        }
        for(i = 0; i < Up; i++)
        {
                printf("%d ", Ary[i]);
                if(i % 10 == 0)
                {
                        printf("n");
                }
        }
        return 0;
}

这可能是一个糟糕的方式来试图弄清楚,我也可能这样做是一个完全错误的方式;然而,我有时会遇到分割错误。如果我使用小的值,比如只输入4或5个值,它工作得很好,但是如果我输入10个值,它会给我一个分割错误。如果我输入50个值,它允许我输入所有50个值,但在打印出第41个值后给我一个分段错误。

代码本身只是达到目的的一种手段。最终,我想知道的是如何建立一个数组的任何东西,可以有值添加到它无限期,同时保留以前的值使用动态内存分配?

p。我希望这能很好地定义我的问题,但是如果没有,我想完善我的问题,这样就更清楚了。

这行不通:

int Ary[0];

你创建了一个没有元素的数组;这种数组的唯一有效用途是获取它的地址,但你不能像以前那样对它进行索引。

相反,您应该创建一个指针,指向稍后将作为数组分配的对象:
int *Ary;

当你知道你想要多少个整数时:

Ary = malloc(Up * sizeof(int));

现在您可以对从0到(Up-1)的任何索引执行Ary[index]。如果您以后想要扩大数组,您可以使用realloc()(许多在线教程)。

您需要使用动态分配,您现在所做的是静态分配,您需要学习如何使用mallocfree

所以请记住,你想要做的不是"高效",但绝对可以作为一个学习练习来学习如何制作这样一个容器。

你需要做的是分配所需的内存量,以包含当前数组中的值的数量+每次你想"添加"一个新值到你的数组,例如:malloc(sizeof(int)*(<current_number_of_values>+1))

我说"添加"在引号中,因为你将不得不做的是每次为一个全新的数组分配内存,并复制你的旧值加上用户输入的新值,然后free你的旧数组,以避免内存泄漏。

有一些STL容器可以在内部做到这一点,但效率要高得多,但我认为你这样做是为了学习,而不是在任何严肃的事情上使用你自己的容器。

相关内容

  • 没有找到相关文章

最新更新