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:
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