Kleiner Fehler von kleinem Entwickler
-
Ich lerne seit 3 Monaten fleissig C++ und habe sogar ein Buch gekauft!
Ich verstehe nicht genau wieso mir folgende Zeilen einen Fehler ausgeben! Habe den Fehler schon seit 2 Tagen, mach ich hier ein Überlegungsfehler?
char* lpBuffer; *lpBuffer = 'A'; *(lpBuffer + 1) = '\0'; cout << lpBuffer << endl;Vielen Dank!
-
das programm schmiert mir hier übrigens gnadenlos ab
-
lpBufferzeigt auf gar nichts.
-
Welche Fehlermeldung kommt denn?
Der Fehler den du machst, ist dass du keinen Speicher für das char-Array reservierst. Der Pointer zeigt irgendwohin und schreibst fleißig in den Speicher, der dir garnicht gehört.
-
jebi schrieb:
char* lpBuffer; *lpBuffer = 'A';Die aller erste Frage die sich stellt: Wo reservierst du den Speicher. Du weist über eine (noch dazu zufällig, da uninitialisierten) Adresse einen Speicherbereich einen Wert zu. Einem Speicherbereich der irgendwo (und nicht von dir reserviert) liegt.
-
Mir fiel auf, daß Du keinen SPeierplatz besitzt, in den Du reinschreiben darfst.
char vielSpeicher[100]; char* lpBuffer; lpBuffer=&vielSpeicher[0]; *lpBuffer = 'A'; *(lpBuffer + 1) = '\0'; cout << lpBuffer << endl;
-
wen ich bei einer zuweisung eines arrays kein index setzte kann ich mir doch den addressoperator sparen weil der array selbst dan den nullten index zurückgib, richtig?
lpBuffer=&vielSpeicher[0]; => lpBuffer=vielSpeicher;
-
jungs ich habs verstanden, es geht nun. nach 2 tagen arbeit. jebi ist euch dankbar. ihr seit ein tolles eingespieltes team!
-
naia
übrigens wen ihr mir folgende frage beantwortet seid ihr di besten!void PrintError(DWORD error) { char *lpBuffer; FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, error, 0, (LPTSTR)&lpBuffer, 0, NULL); cout << error << ": " << lpBuffer << endl; }Der FormatMessage bekommt meinen char Zeiger und füllt es mit dem Error String. Und von wo weis der junge da, dass die bytes nach dem lpBuffer leer sind ??? wasn das für einer
-
Hast du die Dokumentation zu FormatMessage gelesen oder einfach nur mal irgendwo Copy&Paste gemacht? Irgendwie denke ich, dass es eher das Letztere ist. Lies mal die Dokumentation, dann kannst du dir deine Frage selbst beantworten:
http://msdn.microsoft.com/en-us/library/ms679351.aspxWenn du ein guter Leser bist, wirst du sogar merken, dass du hier ein Speicherleck erzeugst.
Grüssli
-
FORMAT_MESSAGE_ALLOCATE_BUFFER