Mein problem ist das ich überall wo ich im Internet nachschau die dynamische Speicherverwaltung mit malloc und delete oder ähnlichen befehlen verbunben ist. Es gibt doch aber auch Funktionen in c / c++ die das automatisch machen z.B. bei der Rekursion werden ja Variablen dynamisch zur Laufzeit angelegt.
Kann mir jemand noch ein Paar Beispiele Sagen bei denen der Speicher dynamisch angelegt wird.(Bitte im Rahmen bleiben und gängige Beispiele nennen).Bin noch am Anfang meiner Programmierlaufbahn!!
Du benutzt die dynamische Speicherverwaltung immer wenn du z.B. Daten auf dem Heap und nicht auf den Stack legen willst, d.h. Sachen auf dem Heap werden nicht automatisch von der Funktion gelöscht sondern müssen eigenhändig mit free() oder delete gelöscht werden.
/*Bsp: dynamische Speicherallokation für eine einzelne Variable vom Datentyp int*/ int * pNum=NULL; //Speicher allokieren num = newint; //Speicher freigeben nicht vergessen!! delete []pNum;
/*Bsp: dynamische Speicherallokation für eine zweidimensionale Matrix für Datentyp int*/ int ** matrix; //Speicher allokieren int numOfRows=..., numOfColumns=....; matrix = newint * [row]; for(int row=0; row<numOfRows ;row++){ matrix[row] = newint[numOfColumns]; } //arbeiten auf matrix[i][j] //Speicher freigeben nicht vergessen!! for(row=0; row<numOfRows ;row++){ delete []matrix[row]; } delete []matrix;
1st edit: *-chen vergessen, ups @all: wie sieht das mit Initialisierung auf NULL bei Zeigern aus? Soll, muß oder was? -- freshman.say("Wer nicht an Wunder glaubt ist kein Realist!\a"); while(1)freshman.ask(sillyQuestion);Dieser Post wurde am 02.07.2004 um 13:54 Uhr von freshman editiert.
Mit 0 (nicht mit Null, das ist c) initialisieren muss nicht, kann aber helfen Fehler zu vermeiden. Wenn man abfragen muss, ob ein Pointer gültig ist, dann sollte er im ungültigen Fall mit 0 initialisiert worden sein. -- Wer früher stirbt ist länger tot.
@(un)wissender: Es ist egal, ob du auf NULL oder 0 prüfst, ist egal, wegen #define NULL 0 -- All parts should go together without forcing. ... By all means, do not use a hammer. (IBM maintenance manual, 1925)
freshman postete @all: wie sieht das mit Initialisierung auf NULL bei Zeigern aus? Soll, muß oder was?
Man kann. Ich tus. Der Grund ist einfach: ein uninitialisierter Zeiger produziert u.U. schwerer zu findende Fehler als ein mit NULL initialisierter. -- Gruß, virtual Quote of the Month Ich eß' nur was ein Gesicht hat (Creme 21)