Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » pointer prüfen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
20.12.2004, 07:03 Uhr
derphilipder



Hi!

Kann ich einen pointer, bevor ich delete ausführe, darauf prüfen, ob er überhaupt noch auf einen "gültigen" Speicherbereich zeigt?
--
Konfuzius says: "A man who goes to bed with an itchy asshole is a man who wakes up with stinky finger!"
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
20.12.2004, 09:23 Uhr
(un)wissender
Niveauwart


Nein, ist nicht vorgefertigt.
Wenn du allerdings new usw. überladen hast, dann kannst du dir das ja selber basteln.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
20.12.2004, 16:04 Uhr
derphilipder



Hm, ich wüsste nur grad nicht wie...
--
Konfuzius says: "A man who goes to bed with an itchy asshole is a man who wakes up with stinky finger!"
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
20.12.2004, 21:30 Uhr
(un)wissender
Niveauwart


Das habe ich dir doch schon mal gezeigt oder nicht...
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
20.12.2004, 21:54 Uhr
derphilipder



Ja, sorry...es ging da ja eigentlich um was anderes und mir war nicht ganz klar, wie ich diese Problemstellung jetzt auf die Sache mit der Überladung übertrag.
Du meinst das so, daß ich mir merke, was schon freigegeben wurde, oder?
--
Konfuzius says: "A man who goes to bed with an itchy asshole is a man who wakes up with stinky finger!"
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
20.12.2004, 21:58 Uhr
(un)wissender
Niveauwart


Du merkst dir alle Pointer (und ev. die dahinterliegende Speichergröße), die du aus den new-Funktionen rausgibst. Dann kannnst du überprüfen, ob freizugegeben Pointer valide sind.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
20.12.2004, 23:41 Uhr
Pablo
Supertux
(Operator)


Es gibt keine Funktion, die dir sagt, ob die Stelle, auf die ein Pointer zeigt, durch new / malloc reserviert wurde, das ist nicht möglich.

Was man machen kann ist new überladen (wie wissender sagt) und sich irgendwo in einer Varaible (x) die Adressen speichern, die durch den überladenen new reserviert werden. Dann schreibst du die Funktion, die nachschaut, ob die Adresse sich in x die Adresse befinden, wenn ja, dann wurde durch new reserviert, wenn nicht dann nicht.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
22.12.2004, 09:28 Uhr
virtual
Sexiest Bit alive
(Operator)


Um solche Probleme generell zu vermeiden, sollte man einfach zwei Regeln eisern durchziehen, dann hat man die Probleme eben nicht:

1. Alle Variablen stets initialsieren. Ist bei lokalen Variablen wirklich mit Aktion verbunden; globale Variablen sind eh immer initialsiiert.

2. Nach einem delete/dleete[]/free die Variable auf NULL resetten.

Ich mache das eigentlich immer so und habe in folge dessen schon fast vergessen,was ein dangling Pointer ist .
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
22.12.2004, 09:44 Uhr
derphilipder




Zitat von virtual:

Ich mache das eigentlich immer so und habe in folge dessen schon fast vergessen,was ein dangling Pointer ist .

dangling? Ich mache das nie so und weiß trotzdem nicht was das ist.

Aber das mit dem NULL setzen ist natürlich auch ne gute Idee, da ich ohnehin vor jedem delete auf NULL prüfe.
--
Konfuzius says: "A man who goes to bed with an itchy asshole is a man who wakes up with stinky finger!"
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
22.12.2004, 10:31 Uhr
virtual
Sexiest Bit alive
(Operator)


@derphillipder
Nee - vor delete auf NULL prüfen ist perlen vor die Säue: das macht delete für Dich. Gefährlich sind Pointer, die einen Wert !=NULL haben, aber dennoch ungültig sind (== dangling Pointer):

C++:
int main() {
  char* a = NULL;
  delete a; // okay, a ist NULL, daher erlaubt
  a = new char; // okay
  delete a; // okay
  delete a; // Nicht okay: a!=NULL, aber bereits freigegeben.
}


--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: