Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   "public-Pointer" wird nach Verlassen einer Fkt. zerstört? (https://www.delphipraxis.net/121948-public-pointer-wird-nach-verlassen-einer-fkt-zerstoert.html)

Elko 7. Okt 2008 13:20


"public-Pointer" wird nach Verlassen einer Fkt. ze
 
Hallöchen ;-)
Ich stehe mal wieder vor einem Rätsel... Ich habe in meinem C-Projekt einen "public-Zeiger" (falls man das so nennt) deklariert:
Code:
MIXED_ROMCODE *rommix;
Jetzt rufe ich eine Funktion auf, die diesen Zeiger benutzt und den Speicher, auf den der Zeiger zeigt mit
Code:
rommix = (MIXED_ROMCODE*) realloc(rommix, (rom_anzahl+1)*sizeof(MIXED_ROMCODE));
erweitert.
Letztendlich greife ich dann -wenn die Funktion durchlaufen wurde auf den Inhalt des Zeigers "rommix" zu und das Programm stürzt ab. Ich habe mir mal die Adresse, auf die rommix nach der Funktion zeigt, mal ausgeben lassen: 0
Ich habe schon viel gegoogelt und folgendes gefunden:

Zitat:

Unser letztes Beispiel zu den Rückgabewerten von Funktionen behandelt das Problem "verwaisten" Speichers. Ein solcher kann entstehen, wenn ein Zeiger zurückgegeben wird. Voraussetzung dafür ist, daß die aufgerufene Funktion mit Hilfe von malloc() Speicher anfordert, in dem sie ihre Daten ablegt. Speicherplatz, den die dynamische Speicherverwaltung zur Verfügung stellt, bleibt auch nach dem Verlassen der Funktion, in der er angefordert wurde, reserviert — und zwar so lange, bis er explizit mit free() wieder freigegeben wird. Im Gegensatz dazu sind Pointer, mit denen darauf zugegriffen werden kann, dann nicht mehr vorhanden. Versäumt es nun der Programmierer, den Wert dieser Pointer in einer Variablen des Aufrufers abzuspeichern, dann gibt es keine Möglichkeit mehr, auf den "ge-malloc-ten" Speicher zuzugreifen: Die automatische Pointer-Variable der gerufenen Funktion wurde ja nach deren Beendigung zerstört
Macht das Sinn??? Warum wird eine "pubilc-Pointer-Variable" nach Verlassen der Funktion zerstört?

Gruß,
Elko

Apollonius 7. Okt 2008 13:32

Re: "public-Pointer" wird nach Verlassen einer Fkt
 
In C ist der Terminus "automatische Variable" äquivalent zu "lokale Variable". Wenn ich den Text richtig verstehe, wird hier nur ausgesagt, dass deine Zeiger-Variable zerstört wird, aber nicht, dass der Speicher freigegeben wird.

jfheins 7. Okt 2008 13:35

Re: "public-Pointer" wird nach Verlassen einer Fkt
 
Zitat:

In case that the size is 0, the memory previously allocated in ptr is deallocated as if a call to free was made, and a NULL pointer is returned.

If the function failed to allocate the requested block of memory, a NULL pointer is returned.
Vll. liegts daran :?:

Elko 7. Okt 2008 13:53

Re: "public-Pointer" wird nach Verlassen einer Fkt
 
Hmmm, ihr glaubt gar nicht, was für ein trivialer Fehler mir unterlaufen ist:
Ich habe der Funktion nochmals einen Pointer auf rommix übergeben. Und der wird natürlich zerstört... naja, jetzt hab ich einfach den einen Parameter entfernt... jetzt läufts :thumb:

trotzdem: thx @all :zwinker:

Gruß,
Elko


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:01 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz