AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein "public-Pointer" wird nach Verlassen einer Fkt. zerstört?
Thema durchsuchen
Ansicht
Themen-Optionen

"public-Pointer" wird nach Verlassen einer Fkt. zerstört?

Ein Thema von Elko · begonnen am 7. Okt 2008 · letzter Beitrag vom 7. Okt 2008
Antwort Antwort
Elko

Registriert seit: 2. Feb 2008
52 Beiträge
 
Delphi 7 Personal
 
#1

"public-Pointer" wird nach Verlassen einer Fkt. ze

  Alt 7. Okt 2008, 13:20
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
Keyboard not found. Press any key to continue.
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#2

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

  Alt 7. Okt 2008, 13:32
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.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#3

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

  Alt 7. Okt 2008, 13:35
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
  Mit Zitat antworten Zitat
Elko

Registriert seit: 2. Feb 2008
52 Beiträge
 
Delphi 7 Personal
 
#4

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

  Alt 7. Okt 2008, 13:53
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

trotzdem: thx @all

Gruß,
Elko
Keyboard not found. Press any key to continue.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz