Frage

Ich erstelle einen Zeiger auf Zeiger eines Klassenobjekts und wenn ich versuche, ein neues Objekt mit den Zeigern es seg-Fehler zu erstellen. Warum geschieht das?

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);     

}

Der Soldat Klasse Constructor:

Soldier(int, int, int, int);
War es hilfreich?

Lösung

Mit leeren Soldier Konstruktor Code funktioniert einwandfrei (mit Ausnahme korrigiert Tippfehler, wie Klein level.soldier[])

Bitte senden Sie das Konstruktorrumpf.

Andere Tipps

Ich kann keine segfault bezogene Probleme in Ihrem Code finden.

Aber ich bin verwirrt, warum Ihre Groß- und Kleinschreibung nicht übereinstimmt:
Die Klasse wird als " Soldat " und der Soldat ** heißt " Soldat ".

Aber Sie schreiben:

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

und

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

Wenn der Code kompiliert wirklich, wie Sie es geschrieben haben, ist dies das Problem sein könnte.

Möglicherweise i >= level.SoldierCount?

Was ist der Wert von level.SoldierCount? Was ist der Wert von i

Die einzige Möglichkeit, ein segfault auftreten kann, ist, wenn Sie nicht zugewiesenen Speicher zugreifen. In der Zeile, die Sie markiert ist, der einzige Ort, in dem Array (oder innerhalb des Konstruktors, die Sie nicht den Code für Post haben) passieren kann. Höchstwahrscheinlich werden Sie das Array außerhalb der Grenzen erreichbar.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top