Warum funktioniert das Pointer-Pointer Initialisierung Seg Fehler?
-
20-08-2019 - |
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);
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.