[英]Segfault when calling a method c++
我對 C++ 還很陌生,這個問題讓我有點困惑。 我試圖從對另一個類中的方法的調用中分配一個變量,但它總是出現段錯誤。 我的代碼編譯時沒有警告,我檢查了 gdb 中的所有變量是否正確,但函數調用本身似乎會導致段錯誤。 我使用的代碼大致如下:
class History{
public:
bool test_history();
};
bool History::test_history(){
std::cout<<"test"; //this line never gets executed
//more code goes in here
return true;
}
class Game{
private:
bool some_function();
public:
History game_actions_history;
};
bool Game::some_function(){
return game_actions_history.test_history();
}
非常感謝任何提示或建議!
編輯:我編輯了代碼,因此不再有 local_variable 並且該值直接返回。 但它仍然是段錯誤。 至於貼出實際代碼,比較大,應該貼哪些部分?
據我所知,您顯示的代碼沒有任何問題。 但是,段錯誤通常很好地表明您的內存已損壞。 除了您顯示的內容之外,它還會在其他地方發生,並且只會影響此處的代碼。 我會查看您處理數組、指針或任何手動內存交互的任何地方。
我已經成功地使用了valgrind並出現了很多段錯誤。
您是否嘗試使用由段錯誤引起的核心轉儲運行 gdb? 來自 man gdb:
gdb program core
要創建核心轉儲,您可能必須設置:
ulimit -c unlimited
在黑暗中拍攝。 (Game*)this
是NULL
?
代碼很好,但示例太不完整,無法說明哪里出了問題。 我建議的一些事情:
將打印輸出添加到每個類的析構函數和構造函數:
Game::Game() { cerr << this << " Game::Game" << endl; }
Game::Game(Game const&) { cerr << this << " Game::Game(Game const&)" << endl; }
Game::~Game() { cerr << this << " Game::~Game" << endl; }
bool Game::some_function() { cerr << this << " Game::some_function()" << endl; ... }
這將揭示:
其次,為了調試,我強烈建議將打印輸出發送到 cerr 而不是 cout。 cout 通常在輸出之前被緩沖(為了效率),而 cerr 不是(至少,過去是這樣)。 如果您的程序在沒有執行其錯誤處理程序、at_exit 等的情況下退出,那么您更有可能看到未緩沖並立即打印的輸出。
第三,如果您的類聲明位於頭文件中,類定義位於一個 cpp 文件中,而使用該類的代碼位於另一個文件中,那么如果在更改后沒有重新編譯任何一個 cpp 文件,您可能會遇到這種崩潰標題。
其他一些可能性是:
我想知道是因為您在 Game 類的私有中定義了 some_function() 。 所以你上面提到的代碼結構也會為此拋出錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.