-5

コードが NULL ポインターになっていると、デバッガーでセグメンテーション違反エラーが発生しました。

この関数はエラーを行います:

void Player::nullActive()
{
    activeCharacter = NULL;
}

activeCharacter は Character クラスの単なるポインタです。

また、ここにプレーヤークラスがあります:

class Player
{
    public:
        Player(unsigned int accID, std::string aID, bool isBanned); //constructor, allow only create object id-s one time
        ~Player();

        std::string getAtheriusID(); //return account id

        unsigned int getAccountID(); //return atherius id

        boost::ptr_vector<Character> characters;

        bool isBanned();

        bool hasActiveCharacter();

        void nullActive();

        void setActiveCharacter(Character * character);

        void setConnection(CSConnection * con);
        CSConnection * getConnection();

        Character * getActiveCharacter();

        unsigned int atheriusCoins;
    protected:
        unsigned int accountID; //account unique id
        std::string atheriusID; //account name / atherius id
        bool banned;

    private:
        CSConnection * connection;
        Character * activeCharacter = NULL;
};

そしてデバッガの出力:

プログラム受信信号 SIGSEGV、セグメンテーション違反。At F:\EternalHeroes\server\src\game\src\Player.cpp:36 続行中... プログラムが信号 SIGSEGV を受信しました。セグメンテーション違反です。At F:\EternalHeroes\server\src\game\src\Player.cpp:36 続行中... [Inferior 1 (プロセス 11552) はコード 030000000005 で終了しました] Debugger はステータス 0 で終了しました

4

1 に答える 1

3

他にある可能性は低いので、コメントから回答に移動するだけです;)

この多くの情報から推測できる限り、activeCharacter はメンバー変数であり、この関数が実行されるまでに、このポインターは破損または null になります。

于 2013-10-21T19:20:54.107 に答える