Forum: PC-Programmierung malloc, string größer als reservierter Speicherplatz für string


von Feldi (Gast)


Angehängte Dateien:

Lesenswert?

Hallo
Sehe ich das richtig dass wenn
es heißen würde:
1
  struct ListElem*root;                                             // 
2
  root =  (struct ListElem*) malloc (sizeof(struct ListElem));       // Erzeugung eines neuen Elements und Anhängen an Root(1.4)
3
  platz = (char*)malloc(strlen("Michael")+1);                       
4
strcpy(platz, "Michaelaaaaaaa");

das dann der reservierte Speicherpletz überschritten würde und irgend 
ein anderer speicher überschrieben würde??

(Im Anhang ist der komplette Code)
Gruß feldi

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Feldi schrieb:
> platz = (char*)malloc(strlen("Michael")+1);
> strcpy(platz, "Michaelaaaaaaa");

Richtig erkannt, das geht in die Hose.

von ruhegenießer (Gast)


Lesenswert?

kleiner Tipp am Rande, für Strukturen und Pointer hat C syntaktischen 
Zucker:
1
 (*root).prio = 10;
lässt sich auch als
1
root->prio=10;
schreiben.

von Michael N. (much)


Lesenswert?

Feldi schrieb:
> das dann der reservierte Speicherpletz überschritten würde und irgend
> ein anderer speicher überschrieben würde??

Das Programm würde mit einem Speicherzugriffsfehler abstürzen würde ich 
sagen.

von Klaus W. (mfgkw)


Lesenswert?

Oder nicht abstürzen und Unfug machen.
Oder nicht abstürzen und keinen Unfug machen.
Oder irgendwann später abstüurzen.

Ich würde mich da nicht so genau festlegen :-)

von Vlad T. (vlad_tepesch)


Lesenswert?

1
struct ListElem*root;                                       
2
root =  (struct ListElem*) malloc (sizeof(struct ListElem));

schreibt man übrigends besser so:
1
struct ListElem*root;                                       
2
root =  malloc (sizeof(*root));

Warum?
Weniger Stellen, die man ändern muss/vergessen kann, wenn man typen 
austauscht.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.