0

以下のコードでは、push_back() を呼び出す行で segfault が発生します。

CTrigger CTriggerManager::AddTrigger(const std::wstring& eventName)
{
    CTrigger trigger(eventName);
    m_Triggers.push_back(trigger);
    return trigger;
}

コードから明確でない場合は、オブジェクトを初期化しようとしていますtriggerが、それを list の後ろにプッシュしますm_Triggers。なぜこれがセグメンテーション違反を引き起こす可能性があるのか​​ 誰にも教えてもらえますか?

必要に応じて、ここで完全なコンテキストのコードを参照してください。

4

2 に答える 2

2

TriggerManger はどこで使用および宣言されていますか? push_back でクラッシュしているため、CTriggerManager の実際のインスタンスが null であり、メンバー変数 (m_Triggers) への最初のアクセスがアクセス違反を引き起こしていると思います。

ここで宣言されていますが、インスタンス化されていません: world.cpp:

CTriggerManager* pTriggerManager = NULL;
于 2012-12-18T04:11:11.693 に答える
0

問題は明らかにこの関数にはなく、TriggerManager.h/cpp ファイルにもありません。両方のクラスは本当に単純でナイーブです。ところで、m_EventName代入演算子ではなく、コンストラクターで初期化リストを使用する方が適切に初期化するには...

たとえば、使用valgrindしてみてください...本当の理由について興味深いことがわかるかもしれません... --呼び出しの前に内部リストをどこかで破損しているようですAddTrigger...

于 2012-12-18T04:10:52.103 に答える