【问题标题】:How to display a dynamic array with a for loop in c++如何在 C++ 中使用 for 循环显示动态数组
【发布时间】:2021-08-15 05:39:06
【问题描述】:

我正在尝试显示一个动态数组以使用 for 循环检查我的输入,并且没有任何向量(我仍然是初学者,所以我还不知道它的含义,这是一个班级作业)。我也在尝试实现类和对象。这是我的代码:

#include <iostream>
using namespace std;

class Set {
private:
    int size;
    int* arr = new int[size];
public:
    void setArr();
    void dispArr();
};

void Set::setArr() {
    cout << "Please enter the size of your array: ";
    cin >> size;

    cout << "\nPlease enter the elements of your array: ";
    for (int i = 0; i < size; i++)
        cin >> arr[i];
}

void Set::dispArr() {
    for (int j = 0; j < size; j++)
        cout << arr[j] << "\t";
}

void main()
{
    Set myArray;

    myArray.setArr();

    myArray.dispArr();
}

当我运行代码时,有时它可以工作,但大多数时候,它会抛出一个断点错误,没有任何错误代码或解释。有人可以帮我弄清楚如何组合动态数组和类吗? 请和谢谢。

【问题讨论】:

  • 声明 arr 时不要使用 int* arr = new int[size]; - 只需使用 int* arr; 然后在 setArr 中将 arr = new int[size]; 放在 cin &gt;&gt; size; 之后,以便在创建数组之前有一个大小.
  • 顺便说一句:如果你要制作直接包含动态分配内存的类,你应该熟悉The Rule of Three (and friends)
  • int* arr = new int[size]; 表示在创建Set 的实例时应将arr 初始化为new int[size]。 size 的值被求值,arr 指向该大小的数组,无论size 在创建数组时的值如何。稍后更改 size 不会调整数组的大小。 arr 和 size 之间没有创建任何关系,更改 size 对 arr 没有影响。由于在评估 new int[size] 时未初始化 size,因此它的值是不确定的,并且任何使用该值的尝试都具有未定义的行为。

标签: c++ arrays class for-loop dynamic


【解决方案1】:

在初始化 size 之前,您正在分配 arr。因此,size 在此时具有不确定的值,这解释了您的程序不可预测的行为。

解决方案:分配arr 在读取size。更好的是,使用std::vector。

【讨论】:

    猜你喜欢
    • 2018-11-11
    • 2021-12-27
    • 1970-01-01
    • 2015-07-31
    • 2019-01-26
    • 2014-11-06
    • 2021-01-11
    • 2016-08-19
    • 2018-09-09
    相关资源
    最近更新 更多