Seite 1 von 1
isPointerPossible() - Wertbereich von Pointern validieren
Verfasst: 11.06.2009 12:13
von cxAlex
Ob ein Zeiger gültig ist oder nicht kann man leider nicht feststellen, mit diesem Code immerhin ob er sich in einem gültigen Bereich befindet:
Code: Alles auswählen
Macro Bool(Expression)
((Expression) Or #Null)
EndMacro
Procedure isPointerPossible(*Pointer)
Protected SInfo.System_Info
GetSystemInfo_(@SInfo)
ProcedureReturn Bool((*Pointer <= SInfo\lpMaximumApplicationAddress) And (*Pointer >= SInfo\lpMinimumApplicationAddress))
EndProcedure
Gruß, Alex
Verfasst: 11.06.2009 12:39
von gnasen
Ich habe mir angewöhnt Pointer, nachdem sie nichtmehr genutzt werden (zB weil der Speicher freigegeben wurde) direkt auf Null zu setzen.
Und da man jeden Pointer vor Gebrauch wenigstens darauf prüfen sollte, ob er überhaupt irgendwo hin zeigt, kann man so schon viele Fehler finden/verhindern.
Wenn man prüfen muss, ob ein Pointer brauchbar sein könnte, hat man meiner Meinung nach wahrscheinlich irgendwo etwas unsauber gearbeitet.
Entweder man prüft, ob die Zuweisung geklappt hat, oder nicht. Zwischendinger würde ich nicht machen.
Verfasst: 11.06.2009 12:44
von cxAlex
> Ich habe mir angewöhnt Pointer, nachdem sie nichtmehr genutzt werden (zB weil der Speicher freigegeben wurde) direkt auf Null zu setzen.
Mach ich auch so. In eigenen Programmen verwende ich sowas auch nicht, nur bei DLLs von 3. prüf ich schon mal ob ich nen gültigen Pointer kriege oder ob die DLL Mist baut.
Re: isPointerPossible() - Wertbereich von Pointern validiere
Verfasst: 11.06.2009 13:02
von DarkDragon
Ich wollte nur mal auf das hier hinweisen:
IsBadCodePtr
IsBadReadPtr
IsBadStringPtr
IsBadWritePtr
Sind bereits Funktionen die dazu gedacht sind zu prüfen ob der Pointer gültig zu sein scheint.
[EDIT]
Euh dumme Links.
Verfasst: 11.06.2009 13:11
von edel
Da steht aber auch das man sie nicht nutzen soll.
Verfasst: 11.06.2009 13:15
von DarkDragon
edel hat geschrieben:Da steht aber auch das man sie nicht nutzen soll.
Klar

. Da hab ich auch nichts anderes behauptet.
Was man vielleicht mal versuchen könnte wär ein aktives Garbage-Collector System für PureBasic. Als Precompiler wie bei den OOP dingern oder wie bei remi_meiers Profiler.