#include<cassert>
#include<initializer_list>
#include<iostream>
class IntArray {
int m_length;
int *m_data;
public:
IntArray() : m_length(0), m_data(nullptr) {}
IntArray(int length) : m_length(length) {
m_data = new int(length);
}
IntArray(const std::initializer_list<int> &list) : IntArray(list.size()) {
int count = 0;
for (auto &element : list) {
std::cout << element << '\n';
m_data[count] = element;
++count;
}
}
~IntArray() { delete[] m_data; }
int& operator[](int index) {
assert(index >= 0 && index < m_length);
return m_data[index];
}
int getLength() { return m_length; }
};
int main() {
IntArray array{ 4,3,2,1 };
for (int i = 0; i < array.getLength(); i++)
std::cout << array[i] << " ";
system("pause");
return 0;
}
在线路系统处达到的断点(“暂停”); 在Visual Studio中检测到严重错误,而以上代码在在线c ++ repl中可以正常工作。我只是不明白为什么以上错误会在Visual Studio中显示。
答案 0 :(得分:0)
您的程序有未定义的行为。您只为一个int
m_data = new int(length);
但是您正在编写多个元素,因此您正在修改没有访问权限的存储区-它是UB。 更改为
m_data = new int[length];