Entwickler-Ecke
Alle Sprachen - Alle Plattformen - c++ Struktur Fehler
ssb-blume - Do 30.05.19 14:15
Titel: c++ Struktur Fehler
Hallo;
Ich habe unter C++ eine Struktur mit folgenden Inhalt:
C++-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| const int maxM = 64;
typedef struct _TRegister { string Name; bool On; char Werk; byte Led; int i; DWORD sample[maxM]; DWORD sampler[maxM]; bool on[maxM]; } TRegister;
_TRegister REG[maxMidi]; _TRegister *REG; REG = new _Tregister[maxM] |
Das Array REG wird nun mit Daten gefüllt.
Dabei entsteht immer ein Ram-Zugriff-Fehler bei einem Element (7. Element des Array, Element Name). Und nur bei diesem!
Nun die Frage:
Wenn ich das Array mit new Erzeuge entsteht kein Fehler, die im Record vorhandenen Unterarrays sind jedoch nicht richtig erzeugt.
Wie muß ich die Unterarrays deklarieren, das Sie in voller Länge in REG vorhanden sind?
Ich mache C++ sehr selten, daher die Frage wie ein Anfänger.-..
Übrigens: Memtest gemacht, (16GB) kein Fehler!
Hansi
Th69 - Do 30.05.19 14:54
Welchen Wert hat denn maxMidi?
Und sollte es nicht auch REG = new _TRegister[maxMidi] heißen?
Ich nehme an beim Befüllen entsteht der Fehler, weil du außerhalb der erlaubten Array-Indizes zugreifst.
ssb-blume - Do 30.05.19 15:54
Danke für die schnelle Reaktion.
da sind 2 bereiche als auswahl, mit und ohne new! ( zur Auswahl! natürlich im Programm nur eine deklaration!)
Der Zugriffsfehler ist immer an der gleichen Stelle des Array: Element-nr. 7:
name
Wird die Struktur-Reihenfolge geändert, ändert sich auch die Fehlerstelle!
Die frage ist eigentlich:
wie muß ich die Arrays (DWORD..) initialisieren, damit sie im Record-array existieren???
hansi
Moderiert von Th69: Code-Tags hinzugefügt
Th69 - Fr 31.05.19 09:29
Wenn es nur an dem Member Name liegt, dann habe ich die Vermutung, daß du die Struktur als POD (plain old data) benutzt - aber da string ja eine Klasse ist, nicht byteweise kopiert werden sollte.
Teste mal, ob es ohne den Member Name funktioniert (oder mit einem char Name[maxName]).
Wenn du trotzdem nicht weiterkommst, dann zeige mal relevanten Code zum Erzeugen, Befüllen und Auslesen der Struktur.
ssb-blume - Sa 01.06.19 09:46
Auf die Idee muss man erst mal kommnen!
Der Membername war schon auf nam geändert, man weis ja nie..
Natürlich, da string etwas besonderes in C ist, ist ein Char genau das richtige!
Der Text bei dem Fehler war besonders lang, alle anderen waren wesentlich kürzer.
Hab die Länge geändert und der Fehler war weg; Man sollte bei solchen Rekords immer auf gleiche Länge achten.
Also, nochmals vielen Dank für die Antwort!!
Hansi
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!