arrays verlieren die dimensionsgröße
-
Ich brauche für ein Programm mehrere Arrays, die Variablen einer Klasse sein sollen.
Die Klasse sieht folgendermaßen aus:class CSavegame { public: unsigned char m_Header[8]; char m_Spielname[38]; unsigned short m_unknown0[2601]; int m_Geld; unsigned short m_unknown1[17]; Stadt m_pStaedte[53]; int m_Bankguthaben[52]; Soldaten m_Rekruten[53]; unsigned short m_unknown2[2520]; string m_Warennamen[98]; string m_Stadtnamen[53]; string m_Materialnamen[6]; string m_Rassennamen[5]; string m_Einheitennamen[8]; bool LadeRassennamen(char* Datei); bool LadeEinheitennamen(char* Datei); bool LadeWarennamen(char* Datei); bool LadeStadtnamen(char* Datei); bool LadeMaterialnamen(char* Datei); bool LadeSpielstand(char* Datei); CSavegame(void); ~CSavegame(void); private: unsigned short m_GeldLO; unsigned short m_GeldHI; };Zuerst werden die Namen geladen und anschließend der Spielstand.
Bis dahin ist alles in Ordung.
Doch wenn ich nun die Daten ausgeben möchte, so werden falsche Daten ausgegeben
und/oder das Programm stürzt ab.
Plötzlich ist die erste Stadt ein "Großkampfschiff" und m_Rassennamen verweist
auf einen ungültigen Speicherbreich.
Außerdem kann man auf Elemente außerhalb der Arraygröße zugreifen, wie zum
Beispiel auf Stadt 99(von 53).
Anscheinend verlieren die Arrays in jeder neuen Funktion ihren Speicherbereich.
Das muss wohl daran liegen, dass sie alle in einer Klasse definiert wurden,
denn vorher, als alles noch in einer Datei lag und diese Variablen global waren,
trat dieses Problem nicht auf.
Ich möchte aber diese Aufteilung in Klassen beibehalten, da zum Einen es
übersichtlicher ist und ich zum Anderen diese Klasse in ein MFC Projekt
übertragen möchte.
Wie kann man dieses Problem lösen?
-
Ich kann dir net sagen woran es liegt da fehlt Code, nimm aber am Besten Container aus der STL
-
C++-Arrays kennen ihre größe nicht.
Ein Array wird in C/C++ als ein Pointer auf das erste Element des Arrays abgebildet. Der Index verschiebt diesen Pointer um X-Speicherstellen.
Wie groß das Array ist weiss nur der Programmierer.
Du musst dir entweder die Größe separat in eine Variable merken oder aber z.B. STL-Containerklassen zurückgreifen, die wissen wieviele Elemente sie aktuell halten.
-
benutz doch einfach std::vector, das ist dann sogar ein dynamisches Array und mußt dich um nichts kümmern.
-
Ja, ich bin gerade beim durchlesen des Forum auf deine Seite gestoßen, auf der
das ganze beschrieben wird.
Jedoch habe ich ein kleines Problem bei der Initialisierung.
Bei vector<string> m_Warennamen(98); kommt die Fehlermeldung
"error C2059: Syntaxfehler: 'constant'"
Damit kann ich nichts anfangen, da das für mich das erste mal mit STL Containern ist.
-
-
Ich hab den Fehler behoben, doch nun friert das Programm beim Zerstören des Fensters ab.
Heh.
Naja, dieses Fehler behoben->neuer Fehler kann eigentlich nicht mehr lange weitergehen.
Danke an euch alle.
-
Mathias schrieb:
C++-Arrays kennen ihre größe nicht.
Nunja, ganz so ist es auch nicht. C++ Arrays haben keine Member-Funktion, die die Grösse zurückgibt, so wie zB std::vector. Man kann aber trotzdem die Grösse ermitteln, zB mittels sizeof.
Mathias schrieb:
Ein Array wird in C/C++ als ein Pointer auf das erste Element des Arrays abgebildet.
Wie oft denn noch. Haben wir doch schon zigmal im Forum durchgekaut. Ein Array ist KEIN Zeiger.