PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : malloc free und Co



cyber_gh0st
22.05.2009, 21:01
hi ich habe ein Problem (wenn man das so nennen kann)
unzwar weis ich was und wie die im Titel genannten Funktionen machen aber ich frage mich was das bringen soll also habe ich das doch nicht so verstanden... konnte mir einer mal bitte erklähren wozu das gut sein soll das man den Speicher reserviert is der nich sowieso schon reserviert???

mfg cyber_gh0st

Cr4ckEye
06.06.2009, 20:54
Moderne Systeme wie Linux und Windows haben (um mehrere Programme gleichzeitig starten zu können - nicht wie DOS dass nur einen Thread ausführen kann) Speicherverwaltungen die jedem Programm dem von ihm benötigten Speicher zuweist.
Dadurch wird das überschreiben von Systemelementen oder der Eingriff in fremde Speicherbereiche verhindert.
Sollte man das bewusst nutzen wollen muss man auf API funktionen und Hooks zurückgreifen.
Dieser wird allerdings zum Programmstart reserviert und somit sind nur konstante größen möglich.

z.b. char string[80]; <-- OK!

int len = 8;
char string[len]; <-- FEHLER!

wenn man nun aber nicht weiß wiegroß der Speicher sein muss, (Usereingaben z.b.)
muss man zusätzlichen Speicher im Heap reservieren.

char* String = malloc(strlen(usereingabe) * sizeof(char)); <-- C/++
char* String = new char[strlen(usereingabe)]; <-- Nur C++

free() und delete/delete[] sind die Gegenfunktionen zu malloc und new, sie geben den Speicher wieder frei, die Werte bleiben allerdings im Speicher bestehen!

MfG

EBFE
06.06.2009, 21:12
konnte mir einer mal bitte erklähren wozu das gut sein soll das man den Speicher reserviert is der nich sowieso schon reserviert???
könntest du mir bitte erklären, warum du meinst, dass der Speicher schon sowieso reserviert sein müsste ;) ? Meinst du das OS weist schon beim Programmstart einfach mal einen 100mb Speicherblock zu ;) ?

cyber_gh0st
07.06.2009, 16:28
ah ok danke ich weis jetzt bescheid ihr habt mir echt weitergeholfen in meinem C "studium".