Speicherverwaltung

Neue Frage »

Auf diesen Beitrag antworten »
Informatics Speicherverwaltung

Meine Frage:
Hallo !
Folgende Aufgabe

Ich soll B zu jeder der Funktionen beschreiben, worin das Problem besteht und jeweils Lösungsvorschläge machen( in wenigen Worten beschreiben, wie dieses Problem vermieden werden kann)
Es geht um Verwendung von Speicher bzw Pointern

Meine Ideen:
1)
Bei der ersten Funktion denke ich dass das Problem zumal ist dass die Variable dynamisch erzeugt wird und nicht mehr gelöscht ?
Lösung : Hier lohnt es sich ja keinen dynamischen Speicher anzulegen , also einfach int a = 5 setzen und das wieder ausgeben..

2)
Beim zweiten versteh ich nicht wo das Problem liegen sollte..

3) Hier wird versucht nachdem man den dynamisch belegten Speicher Pointer gelöscht hat wieder darauf zuzugreifen
Lösung : zuerst return und dann delete ?

4) Dasselbe Problem wie bei3),
Lösung vlt statt return n einfach return &z ?

5) hier versteh ich auch nicht was falsch sein sollte :/

Ich hoffe ihr könnt mir behilflich sein..
LG !
 
Auf diesen Beitrag antworten »
InformaTiger RE: Speicherverwaltung

Hallo Informatics,

ich habe mir soeben deine Aufgabenstellung durchgesehen und bin zu folgendem Ergebnis gekommen:

  1. hier ist das Problem, wie du ganz richtig erkannt hast, dass der Speicher den du anlegst nicht mehr freigegeben wird und der Pointer einfach mit einer neuen Adresse überschrieben wird, so dass der alte Wert für immer im Speicher verschwindet
  2. die Variable ret ist zu beginn auf einen willkürlichen Wert gesetzt, das heißt sollte z nicht gerader größer als 1000 sein kann ret mal true mal false zurückggeben
  3. ich denke hier liegt das Problem viel mehr daran, dass du einfach über den "Rand" des Arrays hinausgreifst (das Array ist nur n - 1 groß und in Zeile 20 erfolgt ein Zugriff auf n)
  4. hier wird die Variable n einfach eliminiert bevor der return-Befehl ausgeführt wird (nein, man kann &z nicht zurückgeben, da es sich dort um eine lokale Adresse vom Stack handelt die beim return-Befehlt verworfen wird)
  5. hier passiert genau das was ich in 4. angekündigt habe - es wird ein lokaler Zeiger zurückgegeben der nicht mehr gültig ist, sobald du den scope der Funktion lv verlässt


Ich hoffe ich konnte helfen smile

Mit freundlichen Grüßen
InformaTiger
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »