[英]QApplication method setStyleSheet called from other thread causes segmentation fault
[英]dynamic bitset initialized and called from other method gives segmentation fault
我在類的構造函數中初始化動態位集,然后調用該類的方法以將其填充一些值。 無論我嘗試訪問位集的哪一部分,都會遇到分段錯誤。
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時,它將給出段錯誤。
我檢查了這個問題 ,但我認為這不適用,因為我看到了構造函數的正確輸出,所以我正確地構造了位集。
如果我簡單地使方法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
}
然后,occupancy具有正確的大小,並且是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();
}
在您的代碼中,“ occupancy”是一個語言環境變量,因此您不應在外部訪問它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.