Ich versuche, ein Array von Zeigern zu einer Struktur zuzuordnen, aber etwas stimmt nicht mit meinem Code.Fehler beim Zuordnen eines Arrays von Zeigern zu einer Struktur
Das ist mein struct:
struct Brick {
GameObject2D* handle_;
};
Brick** bricks_;
Und das ist, wie ich versuche, es zu verteilen Speicher:
int bricks_amount_ = 10;
bricks_ = (Brick**)malloc(sizeof(Brick*) * bricks_amount_);
Das Programm zum Absturz bringen. Ich habe eine devenv darauf zu debuggen, wo das Problem ist und es auf dieser Linie abstürzen:
for (unsigned short int i = 0; i < bricks_amount_; i++){
bricks_[i]->handle_ = new GameObject2D(); <---------- CRASH!
}
Irgendwelche Vorschläge?
PS: Sorry für mein Englisch: P
================================ ======================================
[LÖSUNG]
Schließlich habe ich beschlossen, std :: vector statt roh Zeiger zu verwenden:
bricks_.resize(bricks_amount_);
, aber ich habe versucht, die malloc andere Art und Weise zu machen, und es funktioniert auch:
bricks_ = (struct Brick*)malloc(sizeof(struct Brick) * bricks_amount_);
oder dies:
bricks_ = new Brick[bricks_amount_];
Danke den Leuten, die helfen will!
Klar 'bricks_ ohne Absturz tun [i] -> handle_' greift auf nicht initialisierten Speicher zu. 'bricks_ [i]' wurde kein Wert zugewiesen. –
Mischen Sie auch nicht 'malloc()' und 'new()', verwenden Sie 'new []' zum Zuweisen von Arrays. –
Zusätzliche Erklärung zu @KerrekSB 'Kommentar (+1): malloc erstellt ein brauchbares Array, aber der Inhalt ist nicht initialisiert, was bedeutet, dass Ihre Brick * -Zeiger alle einen völlig zufälligen Wert haben, möglicherweise null und möglicherweise über die Sterne hinauszeigend. Was du verpasst hast, war 'game_state_.bricks_ [i] = new Brick();', e. G. kurz vor dem Absturz, um jeden Zeiger innerhalb des Arrays zu initialisieren. – Aconcagua