2017-05-18 7 views
-1

meine Anwendung stürzt ab, wenn es darum geht.Pointer Initialisierung eines Struct Array

So habe ich eine Struktur wie dies zum Beispiel (aber in Wirklichkeit hat es viel mehr Dinge)

struct Record 
{ 
    float m_fSimulationTime; 
    unsigned char m_szflags; 
}; 

In meiner Klasse habe ich es wie folgt erklärt:

Record *m_record[64]; 

Und ich dann initialisieren es: (und hier den Crash occoures (acces Verletzung beim Lesen))

void ClassXYZ::initRecord() 
{ 
    for (int i = 0; i <= 32; i++) 
     for (int j = 0; j < 9; j++) 
      m_record[i][j].m_fSimulationTime = 0.0f; // here happens the crash 
} 

ich hoffe, dass Sie mir helfen können, wh bei mir fehlt hier x.x

Danke in Beratung!

Antwort

5

Die Variable m_record ist ein Array von Zeigern. Sie müssen die Zeiger zuerst initialisieren, bevor Sie auf sie zugreifen.

Zum Beispiel:

for (int i = 0; i <= 32; i++) 
{ 
    m_record[i] = new Record[9]; // Make the pointer actually point somewhere 
    for (int j = 0; j < 9; j++) 
     m_record[i][j].m_fSimulationTime = 0.0f; 

} 

Wenn die Größe 9 zum Zeitpunkt der Zusammenstellung fixiert ist, wäre eine bessere Lösung sein, einen Array von Arrays zu verwenden:

Record m_record[64][9]; 

In diesem Fall würde ich empfehlen Sie stattdessen stattdessen std::array.

Wenn die Größe eines der Arrays zur Kompilierzeit nicht bekannt ist, aber zur Laufzeit eingegeben wird, verwenden Sie stattdessen std::vector.

+0

Danke, ich bekomme es jetzt, ich werde besser mit Vektor :) – Stefanx3