我在类的构造函数中初始化动态位集,然后调用该类的方法以将其填充一些值。无论我尝试访问位集的哪一部分,都会遇到分段错误。MyClass::MyClass(){ boost::dynamic_bitset<> occupancy(200000); // all 0's by default std::cout << occupancy.size() << "\n"; std::cout << occupancy[1234] << "\n"; fill_occupancy();}void MyClass::fill_occupancy(){ std::cout << occupancy[1234] << "\n";}构造函数打印出正确的输出200000和0,但是当输入fill_occupancy时,它将给出段错误。我检查了这个question,但是我认为这不适用,因为我看到了构造函数的正确输出,所以我正确地构造了位集。如果我简单地使方法fill_occupancy()接受dynamic_bitset 类型的参数,然后使用fill_occupancy(occupancy)进行调用,便找到了一种使之起作用的方法。为什么这样做有效,而上面的代码却无效?我可以在其他方法中调用其他数据类型而无需将它们作为参数。谢谢。编辑这是为了防止有人对更详细的说明感兴趣:class MyClass(){ boost::dynamic_bitset<> occupancy; //calls default bitset constructor (i.e size 0)}在MyClass构造函数中,仅调用MyClass::MyClass(){ occupancy(200000); // this is WRONG}由于占用率设置为零大小而产生错误。要调整大小,必须致电MyClass::MyClass(){ occupancy.resize(200000); // this is CORRECT}这样,占用量便具有正确的大小,并且是MyClass的成员,因此可以从该类的任何其他方法(例如fill_occupancy())进行访问。我最初的构造使占用成为与成员同名的局部变量,因此在构造函数中它可以工作,但在其他任何地方都调用了成员(大小为0)来解释段错误。再次感谢juanchopanza提供的解释。 最佳答案 构造函数正在实例化名为occupancy的本地位集,而不是具有相同名称的数据成员:boost::dynamic_bitset<> occupancy(200000); // local variable似乎您想初始化一个数据成员,您可以这样执行:MyClass::MyClass(): occupancy(200000){ std::cout << occupancy.size() << "\n"; std::cout << occupancy[1234] << "\n"; fill_occupancy();}关于c++ - 从其他方法初始化和调用的动态位集导致段错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24948674/
10-11 21:01