【问题标题】:Dynamically growing array until user enters 0动态增长数组直到用户输入 0
【发布时间】:2023-01-12 19:07:20
【问题描述】:

我正在尝试制作一个动态增长的数组,每当用户输入 0 以外的任何整数时,该数组的大小都会增加。按下 0 时,它会停止从用户那里获取数据并执行其余代码。 我试图通过 do while 循环实现不断增长的数组,但它一直在我的数组中给我垃圾值。

int main(){
    int size = 1;
    int* ptr;
    int* ptr1;
    int i = 0;
    int inp;
    ptr = new int[size];
    do{
        ptr1 = new int[size];
        cin >> inp;
        if (inp == 0)
            break;
        else{
            *(ptr + i) = inp;
            size++;
            i++;
            for (int j = 0; j < size; j++){
                *(ptr1 + j) = *(ptr + j);
            }
        }
    } while (1);
    for (int k = 0; k < size; k++)
        cout << *(ptr1 + k) << endl;
    system("pause");
    return 0;
}

【问题讨论】:

  • 请始终使用编程语言标签,否则没有人会找到您的问题。在本例中为 C++。
  • 如果可以,请使用std::vector。如果不是,将数组增长代码移到单独的函数中,每次将大小增加到 1 以上,以避免频繁分配。在复制数组的旧内容后,您忘记执行delete[] ptr; ptr = ptr1;
  • 我们还没有学习过 std :: vector,这只是一个粗略的代码,但我会尝试实现你所说的。谢谢你
  • *(ptr + i) 是否需要使用它而不是 ptr[i]ptr[i] 形式的使用更为广泛,尽管据说他们完成了同样的事情。
  • 我们不需要使用 *(ptr+in)。如果他们完成同样的事情我可以使用 ptr[i]

标签: c++ arrays pointers


【解决方案1】:

当您退出循环时,您已经再次保留了内存。也就是说,你已经把ptr1指向了一个你还没有初始化的大小为size的内存地址。另请注意,当您编写 *(ptr + i) = inp; 时,您正试图写入您尚未分配的内存。这是因为虽然您递增了ptr1,但您并没有对ptr做同样的事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-21
    • 1970-01-01
    • 1970-01-01
    • 2019-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多