Komische Ausgabe
-
Hallo,
ich habe ein Problem mit diesem kleinen Code:
#include <iostream> using namespace std; int main( int argc, char** argv ) { char* czeichen = new char[1]; czeichen[0] = 'A'; cout << czeichen << endl; delete [] czeichen; return 0; }Wenn ich das Programm ohne irgendwelche Parameter über die Eingabeaufforderung starte, bekomme ich diese Ausgabe:
AWenn ich das Programm aber mit Parametern aufrufe, dann bekomme ich diese Ausgabe:
A$>Kann mir jemand sagen, was ich dagegen machen kann?
Mit ratlosen Grüßen
DerRatlose
-
mh kA aber ne andere sache
du hast was vergessen
zu JEDEM new gibt es EIN delete
-
Sorry, dass habe ich vergessen. Ich habe nur den Programmschnipsel aus dem Programm kopiert und das delete vergessen. Werde es ergänzen.
Mit freundlichen Grüßen
DerRatlose
-
Du gibst einen
char*und keinencharaus. Es müsste heissencout << czeichen[0] << endl;Denn eine Zeichenkette muss nullterminiert sein. Das ist sie selten, wenn sie aus nur einem Zeichen besteht und der Rest des Speichers dahinter nicht dir gehört.
-
Hi,
danke. Wenn ich den char* nullterminiere, ist die Ausgabe korrekt.
Mit freundlichen Grüßen
DerRatlose
-
DerRatlose schrieb:
danke. Wenn ich den char* nullterminiere, ist die Ausgabe korrekt.
Du darfst ihn aber nicht nullterminieren, wenn du nur Speicher für ein Zeichen angefordert hast! Es sei denn, das einzige Zeichen wäre eine '\0', aber dann könntest du die Ausgabe nicht sehen.
-
Daran habe ich gedacht^^
Ich habe den Speicher um ein Zeichen erweitert.Mit freundlichen Grüßen
DerRatlose
-
Ah okay, dann ist ja alles gut.

Und immer schön ans
delete[]denken...
-
Ja, ich weiß. Das habe ich gelernt. Auch wenn Windows den Speicher auch so nach dem Programmablauf wieder freigibt. Aber man kann ja auch aufräumen.

Mit freundlichen Grüßen
DerRatlose