Gültigkeit von Zeigern überprüfen

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: Gültigkeit von Zeigern überprüfen

Beitrag von edel »

funker hat geschrieben:Unter 64 Bit nich? Schlecht!
Es steht dir frei, die Lib, natuerlich barrierefrei, nach 64 bit zu portieren.
funker
Beiträge: 33
Registriert: 02.06.2014 12:32

Re: Gültigkeit von Zeigern überprüfen

Beitrag von funker »

Wenn ich darf gerne aba ich kann nich für ein sauberen Code garantieren... :|
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: Gültigkeit von Zeigern überprüfen

Beitrag von Danilo »

funker hat geschrieben:
edel hat geschrieben:In den pbosl gibt es noch eine Try&Catch Lib, funktioniert unter 32 bit sehr gut.
Unter 64 Bit nich? Schlecht!
Du kannst auch das probieren/modifizieren/erweitern:
- [Windows XP+] Try .. Catch .. EndTry - Error Handling
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Re: Gültigkeit von Zeigern überprüfen

Beitrag von Thorium »

Wie schon geschrieben nutzt man dafür heutzutage nurnoch Try&Catch. Das heisst man greift einfach drauf zu und hat nen Errorhandler, der im Fehlerfall ausgeführt wird.

Das nützt dir aber recht wenig. Ein Pointer wird nie einfach so ungültig, schon garnicht wenn er auf eine Prozedur zeigt. Ein gültiger Pointer muss auch nicht zwangsweise ein korrekter Pointer sein. Er kann auf eine gültige Speicheradresse zeigen, die aber garnicht die zu erwartenden Daten enthält.

Einige testen ob der Pointer 0 ist um abzufangen wenn er noch nicht initialisiert wurde. Aber auch das kann man sich in vielen Fällen sparen.
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Gültigkeit von Zeigern überprüfen

Beitrag von STARGÅTE »

Eine Möglichkeit die es durchaus noch gibt wäre (ähnlich wie es der Purifier macht) eine Signal-Bytefolge bei jedem erstellten Objekt/Speicher vorauszustellen.
So kannst du beim Prüfen der Gültigkeit testen, ob die geforderte Bytesequenz (4 oder 8 Byte reichen ja) in den ersten Bytes des Speichers stehen.

Ich verwende dieses Verfahren zB bei meinen Baumstrukturen, um festzustellen ob der Node des Baumes gültig ist oder "illegal" verändert wurde. So steht in den ersten 4 Byte immer eine Prüfsumme der Struktur.
Dieses Prüfung und das zusätzliche Feld kann man ja entfernen (CompilerIf) wenn der Debugger aus ist.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
hjbremer
Beiträge: 822
Registriert: 27.02.2006 22:30
Computerausstattung: von gestern
Wohnort: Neumünster

Re: Gültigkeit von Zeigern überprüfen

Beitrag von hjbremer »

Thorium hat geschrieben:Einige testen ob der Pointer 0 ist um abzufangen wenn er noch nicht initialisiert wurde. Aber auch das kann man sich in vielen Fällen sparen.
Aber wenn man sich das spart, muß man wissen, das nicht initialisierte Strings unter Umständen null zurückgeben.

z.B.
Define a.string
Debug @a\s

erst wenn ein String und sei es ein Leerstring, zugewiesen wurde, wird der Pointer gültig
a\s = ""
Debug @a\s
Purebasic 5.70 x86 5.72 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Antworten