CStringArray - Problem - Visual Studio 2003
-
Hi,
habe Problem bei Umstellung von VC++6.0 auf VS.NET 2003.
Ich verwende die CStringArray Klasse und habe folgenden
Code verwendet (stark vereinfacht):CStringArray array; array.Add(""); array.Add(array.GetAt(0)); CString erg=array.GetAt(1); TRACE("%s\n", erg);Unter VC++6.0 funktioniert es einwandfrei, array.GetAt(0) gibt "" zurück
und wird auf array (1) gesetzt.Nun nach Umstellung auf VS.NET erleidet mein Programm eine Fehlermeldung:
Unbehandelte Ausnahme bei 0x7c176dac (mfc71d.dll) in SA.exe: 0xC0000005:
Zugriffsverletzung-Leseposition 0xfeeefede.Nun kennt jemand das Problem?
Wie kann man es umgehen, so daß ich leere Zeichnfolgen in CStringArray habe?Bis jetzt leite ich CStringArray in ZStringArray ab und überlade Add(...) mit
Prüfung auf leeren String. Ist dies der Fall, schreibe ich ein Leerzeichen in
das Feld. - Dies funktioniert, ist aber nicht sauber.Grüße
-
Das Array legt ein Element an.
Dann forderst Du das noch eins Angelegt wird, der Speicher wird neu Allociert und alle Elemente umkopiert womit das Element von getAt(0) ungültig wird.
(Als mögliche erklärung).
Schiebst Du das Element zuvor in eine Temporäre Variable oder sorgst dafür das der Speicher nicht umkopiert werden muß (Array ist groß genug) ist die Referenz von GetAt auch noch gültig.
-
...
Erscheint logisch.
Mich hat es nur gewundert, daß
es unter 6.0 noch funktioniert hat!Danke!
-
Bei mir klappt es immerhin dann, wenn ich vorher die SetSize(2) anwende!
Anscheinend ist nicht genug Platz vorhanden.