-1

クラス オブジェクトのポインター ツー ポインターを作成し、そのポインターを使用して新しいオブジェクトを作成しようとすると、セグメント フォールトが発生します。なぜこれが起こるのですか?

struct Level
{   
        int SoldierCount;
        Soldier **soldier;
        int taskCount;
        int *taskPercentage;
        int *taskBitmapX;
        int *taskBitmapY;
}level;

void createMap()
{
    //Input and Declartion of various variabls goes here

    level.soldier = new Soldier* [level.SoldierCount];

    //Seg Faults Here
        level.Soldier[i] = new Soldier(initX, initY, initDirection, steps);     

}

Soldier クラスのコンストラクター:

Soldier(int, int, int, int);
4

4 に答える 4

1

コードに segfault 関連の問題は見つかりません。

しかし、大文字と小文字の区別が一致しない理由については混乱しています
。クラスは「ソルジャー」と呼ばれ、ソルジャー**は「ソルジャー」と呼ばれます。

しかし、あなたは次のように書いています:

level.soldier = new soldier* [level.SoldierCount];

と:

level.Soldier[i] = new Soldier(initX, initY, initDirection, steps);

書いたとおりにコードが実際にコンパイルされる場合、これが問題である可能性があります。

于 2009-01-28T13:21:56.787 に答える
1

空のSoldierコンストラクターを使用すると、コードは正常に動作します ( lowercase などの修正されたタイプミスを除くlevel.soldier[])

コンストラクタ本体を投稿してください。

于 2009-01-28T13:23:24.007 に答える
1

もしかしてi >= level.SoldierCount

于 2009-01-28T13:26:22.333 に答える
0

の値はlevel.SoldierCount? の値は何ですかi

segfault が発生する唯一の方法は、未割り当てのメモリにアクセスする場合です。強調表示した行で、発生する可能性のある唯一の場所は、配列内 (または、コードを投稿していないコンストラクター内) です。ほとんどの場合、範囲外の配列にアクセスしています。

于 2009-01-28T13:25:14.050 に答える