Programm stürzt ab. Wieso?
-
Hallo Forum,
ich bin dabei meine Anwendung zu Debuggen. Da wären Zeilen wie diese hilfreich. Jetzt habe ich aber schon in den Debugging Zeilen Abstürze... um sie besser zu analysieren habe ich ein normales HelloWorldKonsolenProjekt mit dem VS6 erstellt:
#include <iostream> #include <windows.h> int main(int argc, char* argv[]) { wchar_t *wReport; wReport = new wchar_t(300 * sizeof(wchar_t)); wcscpy(wReport, L"aaaaa aaaaa aaaaa aaaaa\0\0"); MessageBoxW(0, wReport, L"", 0); //free(wReport); wReport = new wchar_t(300 * sizeof(wchar_t)); // Hier kommt der Absturz: Unhandeld exception... Access Violation. wcscpy(wReport, L"aaaaa aaaaa aaaaa aaaaa\0\0"); return 0; }Wieso stürzt diese Programm ab? Wenn ich das "vergessene" free() vor der zweiten Allokierung setze, will er mir sogar verkaufen das dort ein Breakpoint sei!? Mache ich grundsätzlich etwas falsch?
-
new wchar_t[...] nicht new wchar_t(...)
free hat hier nichts zu suchen, dafür aber passende delete [].
-
zwei stringendezeichen(\0)
-
@Digger182: Das zweite Stringende hatte ich nur aus Verzweiflung drin*g*
Jetzt kann ich endlich mit dem weiter machen was ich eigentlich debuggen wollte. Vielen vielen Dank Helium

-
Neuling_1 schrieb:
@Digger182: Das zweite Stringende hatte ich nur aus Verzweiflung drin*g*
Typischer Fall von "Lass die Finger von Zeigern und verwende die String-Klasse":
std::wstring text = L"aaaa aaaa aaa"; // ... ::MessageBoxW(0, text.c_str(), L"", 0);@Digger: Nicht *zwei* Stringenden sondern *drei*!
-
#include <iostream> #include <windows.h> int main() { wchar_t *wReport = new wchar_t[300]; wcscpy(wReport, L"aaaaa aaaaa aaaaa aaaaa"); MessageBoxW(NULL, wReport, NULL, MB_OK | MB_ICONINFORMATION); delete [] wReport; wReport = new wchar_t[300]; wcscpy(wReport, L"aaaaa aaaaa aaaaa aaaaa"); delete [] wReport; }... kann sein das ich was übersehen habe .. sry...
-
Konrad Rudolph schrieb:
Neuling_1 schrieb:
@Digger182: Das zweite Stringende hatte ich nur aus Verzweiflung drin*g*
Typischer Fall von "Lass die Finger von Zeigern und verwende die String-Klasse":
std::wstring text = L"aaaa aaaa aaa"; // ... ::MessageBoxW(0, text.c_str(), L"", 0);@Digger: Nicht *zwei* Stringenden sondern *drei*!
stimmt...
-
Das find ich wieder nicht vertretbar. Wenn er noch nichtmal mit Grunddatentypen klar kommt... wie soll er den aufbau einer std::wstring-Klasse verstehen?
-
(D)Evil schrieb:
Das find ich wieder nicht vertretbar. Wenn er noch nichtmal mit Grunddatentypen klar kommt... wie soll er den aufbau einer std::wstring-Klasse verstehen?
*Wieso* soll er den Aufbau denn verstehen? Welcher VB6-Anfänger versteht schon den Aufbau der BSTR-, VARIANT- oder SAFEARRAY-Struct? Trotzdem verwendet er Strings, Variants und Arrays.
=> Man muss, um eine Klasse benutzen zu können, ihren Aufbau nicht verstehen. Das ist ja gerade einer der Vorteile der Kapselung.