Speicher frage

2fast4you87 hat gesagt.:
So habe heute mit dem Debugger haltepunkte eingesetzt und mir den Speicher angeguckt!

Code:
char * pc; << 0012FF7C adresse 
pc = "hallo"; << addr -> 0012FF7C bekommt als Inhalt die Adresse wo hallo steht

Ist das richtig?
Ja.
2fast4you87 hat gesagt.:
Wenn ja wie kann man den expliziet sagen der pointer char pc hat die Adresse 0012FF7C?
Das geht nicht in C/C++. Die Adressen von Variablen werden immer noch vom Compiler (bzw. endgültig vom System beim Laden der .exe) festgelegt. Man könnte natürlich irgendwas mit Assembler basteln...

2fast4you87 hat gesagt.:
Und warum ist malloc(6) falsch?
malloc sagt doch nur reseviere 6 adresspeicher und gebe sie als void * zurück. wenn ich also :

Code:
char * pc = (char *) malloc(6);

mache dann bekommt pc ne adresse mit inhalt eine addresse zu 6 speicher addressen.

Laut msdn muss man malloc() oder new machen.

Oder habe ich da was falsch verstanden!?
Mit malloc allozierst du Speicher. Wenn du aber gleich in der darauffolgenden Zeile ein String Literal an die Variable zuweist, ist das einerseits unsinnig da der Speicher für String Literale vom Compiler (normal im Datensegment) automatisch reserviert wird und andererseits ist die Adresse des Speichers verloren/überschrieben und du kannst den Speicher nicht mehr mit free() freigeben (Speicherleck).

Gruß
 
achso klinkt logisch!

nur wann brauch ich dann malloc() bzw new?

Also ich benutze es dann nur bei Listen oder wenn ich ein struct oder Class öfter benutzen möchte.
 
Zurück