Pointer überprüfen um segfault zu verhindern -geht das? -sowohl Linux als auch Windows



  • keine Ahnung warum der andere Thread geschlossen wurde, ich kam gar nicht mehr dazu zu antworten (gerne kann man diesen Text an den anderen Thread hängen und diesen löschen):

    Da es sich um Qt projekt handelt sollte alles natürlich zunächst unabhängig vom BS sein. Zur Not könnte man sich für diesen Spezialfall aber auch 2 seperate Lösungen vorstellen. Ich wäre also an Lösungen für beide BS interessiert. (Traumhaft wäre es natürlich wenn QT diese Funktion auch kapseln würde - eventuell gibts da auch was?)

    Was den Compiler betrifft gilt das selbe - wir wolten uns nich abhängig vom Compiler machen. Deswegen wär ich auch da an "allen" Lösungen interessier - open source Compiler -Lösungen würde ich aber bevorzugen.

    Und wie gesagt es geht sowohl um eine Lösung "falsche" Pointer eingaben beim Funktionsaufruf zu erkennen und zum anderen ein korrektes Verhalten diesbezüglich zu testen.



  • dermoritz schrieb:

    keine Ahnung warum der andere Thread geschlossen wurde

    weil c++ das von sich aus nicht kann, dein konkretes betriebsystem/compiler eventuell aber schon - ist doch nicht so schwer zu kapieren, oder?



  • warum falsche pointereingaben abfangen? Es liegt in der Verantwortung des Aufrufers, dass die Pointer die er übergibt auch gültig sind. Wenn ihr jeden Mist den die Klienten anstellen könnten abfangen und aufräumen wollt, werdet ihr mit eurer Bibliothek nie fertig.
    Und wie im anderen Thread schon mehrmals geschrieben wurde gibts keine Plattformunabhängigen Lösungen. Die einzige Möglichkeit die euch bleibt ist also, für jede Compiler/OS-Version die ihr unterstützen wollt, eine eigene Lösung zu schreiben und mit entsprechenden Compilerschaltern die richtige auszuwählen. Viel Spaß dabei...



  • Dieser Thread wurde von Moderator/in volkard aus dem Forum C++ in das Forum MFC (Visual C++) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • mit visual c++ kannste fein die hardware-exceptions fangen.
    http://msdn.microsoft.com/en-us/library/s58ftw19.aspx

    und mit IsBadReadPtr kannste vorher testen, ob das lesen klappt.





  • vielen dank für die Tips! Ich werd mir die Sachen mal durchlesen. Insbesondere die Lösung für Visual Studio scheint sehr brauchbar. (Funktioniert dann aber auch nur unter Windows, oder?)

    Gibt es entsprechende Dinge auch für minGW/Eclipse? Am besten wär natürlich eine Lösung innerhalb QT - die wär dann Betriebssystem unabhängig - lohnt sich dafür ein Thread im QT Unterforum?

    edit: hab mir mal den Blog durchgeesen, sehr interessant. Das Problem is nur, bei einer Konsolenanwendung unter Windows kommt keinerlei Fehlermeldung.

    Ich Frage mich wie man Unittests praktisch durchführt. Kann man Funktionen die Pinter als Parameter haben überhaupt (teil)automatisiert testen? (Also nach einem Segfault in eimen Test wäre es gut man könnte mit den anderen Tests fortfahren)



  • schau vielleicht mal, ob dein compiler dafür sorgt, daß

    catch(...)//nur echt mit den drei punkten
    

    auch schutzverletzungen fängt.



  • "catch(...)" funktioniert leider nicht. wie gesagt im moment verwende ich minGW unter Eclipse/Windows.
    Was die Unittests betrifft, werden wir wohl die einzelnen Tests in einzelnen Prozessen starten und sie so unabhängig voneinander halten. Falls dann einer mit Segfault abricht kann man das erkennen (QT - hat verschiedene "QProcess"-Stutusmeldungen unter anderem "crashed").



  • Unter Windows wird ein "segfault" als "structured exception" (-> "SEH") abgebildet, für welche man auch hübsch eigene handler schreiben kann.


Anmelden zum Antworten