我制作了一个简单的矢量类,我在初始化对象时遇到了问题。这是我的计划/问题的基础:
int main() {
bla v1(100);
int i=0;
while (i < 101) {
v1.initialise(2.0, i);
i++;
};
return 0;
}
头文件:
class bla {
private:
int m_size;
std::vector<double> v;
public:
bla (int i) {
m_size = i;
std::vector<double> v(m_size);
}
void initialise(double gg, int i) {
v[i] = gg;
};
}
似乎构造函数工作正常,但是当我尝试将v1的所有元素初始化为2.0时,存在分段错误,例如在initialise()内部无法到达v [i]。
欢迎任何帮助,
瑞安答案 0 :(得分:4)
变化:
bla (int i) {
m_size = i;
std::vector<double> v(m_size);
}
成:
bla (int i) : m_size(i), v(m_size) {
}
然后才
while (i < 101) {
成:
while (i < 100) {
// ^^^
答案 1 :(得分:3)
在
bla (int i) {
m_size = i;
std::vector<double> v(m_size);
}
你有一个局部变量v
,它隐藏了成员变量
您正在初始化本地向量以获得m_size
元素,并且在构造函数完成时将其抛弃,使成员向量保持不变并且为空。
由于成员向量为空,v[i] = gg;
对所有i
无效。
您应该使用初始化列表:
bla (int i): m_size(i), v(i) {}
此外,
while (i < 101)
会遍历范围[0, 100]
,其中包含 101 个元素,但您的向量只有100个。
这将导致更多问题,很可能是另一次崩溃。