Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » Speicherverwaltung » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Speicherverwaltung
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Informatics
unregistriert
Speicherverwaltung Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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 !

Informatics hat diese Bilder (verkleinerte Versionen) angehängt:
once.png two.png

24.01.2018 15:41
InformaTiger InformaTiger ist männlich
Tripel-As


images/avatars/avatar-77.gif

Dabei seit: 19.02.2013
Beiträge: 228
Herkunft: Südtirol

RE: Speicherverwaltung Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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

__________________
Why do Java developers wear glasses? Because they can't C#
28.01.2018 20:14 InformaTiger ist offline Beiträge von InformaTiger suchen Nehmen Sie InformaTiger in Ihre Freundesliste auf
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Praktische Informatik » Speicherverwaltung