Hi,
gibt es eine Moeglichkeit in C, einen Zeiger abzufragen der auf eine Speicherstelle steht, ob diese Adresse gueltig ist oder ob es zu einem SIGSEGV (segmentation fault) fuehrt? Natuerlich bevor SIGSEGV auftritt.
Li
Hi,
gibt es eine Moeglichkeit in C, einen Zeiger abzufragen der auf eine Speicherstelle steht, ob diese Adresse gueltig ist oder ob es zu einem SIGSEGV (segmentation fault) fuehrt? Natuerlich bevor SIGSEGV auftritt.
Li
Hi,
gibt es eine Moeglichkeit in C, einen Zeiger abzufragen der
auf eine Speicherstelle steht, ob diese Adresse gueltig ist
oder ob es zu einem SIGSEGV (segmentation fault) fuehrt?
Natuerlich bevor SIGSEGV auftritt.
Nein, die gibt es nicht. Bestenfalls kannst du prüfen, ob der Zeiger 0 ist. Im Prinzip solltest du den Zeiger nur verwenden, wenn du dir sicher bist, dass er gültig ist. Sicher kannst du nur dann sein, wenn du ihn selbst initialisiert hast oder eine dir bekannte Schnittstelle diesen Zeiger als gültig zurück geliefert hat.
Ein ungültiger Zeiger zeigt irgendwo hin. Wenn du glück hast, zeigt er auf einen Speicherbereich, der nicht zur Applikation gehört. In diesem Fall bekommst di SIGSEGV. Viel schlimmer aber sind Zeiger, die irgendwo in den Adressraum deiner Applikation zeigen. Wenn du hier etwas ändert, ändert sich möglicherweise auch der Inhalt einer anderen Variablen. Solche Fehler sind extrem schwer aufzufinden. Das Verhalten deines Programm ist ab diesem Zeitpunkt undefiniert, d.h. es kann stundenlang weiterarbeiten es kann aber auch im nächsten Moment abtsürzen oder eine Aktion ausführen, die du gar nicht erwartest.
Gruß Markus
Hi!
Das kommt darauf an, in welcher Umgebung Du programmierst.
Mit ATL z.B. gibt es sehr wohl ein AtlIsValidAddress(), mit dem sich überprüfen lässt, ob ein Speicherbereich gültig ist. Das lässt sich m.M. nach auch von MFC aus nutzen.
In anderen Umgebungen kann ich Dir leider nicht weiter helfen.
Martin
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Das kommt darauf an, in welcher Umgebung Du programmierst.
Mit ATL z.B. gibt es sehr wohl ein AtlIsValidAddress(), mit
dem sich überprüfen lässt, ob ein Speicherbereich gültig ist.
Das lässt sich m.M. nach auch von MFC aus nutzen.
In anderen Umgebungen kann ich Dir leider nicht weiter helfen.
Tja, und ich kenne ATL und MFC nicht. LabWindows/CVI (National Instruments) heisst unsere IDE, aber auch gcc muss mal herhalten.
Li