【发布时间】: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 >> 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