gpt4 book ai didi

c++ - 在 C++ 中操作 vector 时出现段错误

转载 作者:行者123 更新时间:2023-11-30 00:52:11 26 4
gpt4 key购买 nike

我正在尝试学习 C++,我想用一个简单的程序将 X 实例的 vector 初始化为类成员,但是我遇到了段错误...你能帮忙吗?

#include <iostream>
#include <vector>

class X {
int _x;
public:
X(int i) { _x = i; }
void print() { std::cout << this->_x << std::endl; }
void xAdd() { _x++; }
};


class Y {
std::vector<X*> _x;
public:
Y(int size) : _x(size) {
for (int i = 0; i < size; ++i) _x.push_back(new X(1));
}
void printAll() {
for(unsigned int i = 0; i < _x.size()-1; i++) {
_x[i]->print();
}
}
};

int main(){
Y *y = new Y(5);
y->printAll();
return 0;
}

最佳答案

您使用size 空指针初始化_x;然后你将另一个 size 有效指针推到它上面。然后 printAll 尝试取消引用那些空指针。

要么删除初始化程序(可能添加 _x.reserve(size); 以最小化分配);或者将循环体更改为 _x[i] = new X(1);

一般来说,您对 new 的使用太多了。没有理由让 vector 包含指针而不是对象,或者 y 是动态的而不是自动的。

关于c++ - 在 C++ 中操作 vector 时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19692363/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com