Zugriffsverletzung va_arg



  • Hallo Community,

    ist es möglich die Fehlermeldung 'Zugriffsverletzung an Position...." mit einem try & catch() abzufangen.

    // codeauschnitt
    // ...
       try
       {
          wxString str = va_arg(para, wxString);
       }
       catch( ??? )
       {
          // do something
       }
    // ..
    

    Wenn ja, was müsste ich anstelle der ??? in den catch eintragen??
    Bzw mit welchen eintrag kann ich die Fehler aus der va_arg() abfangen.

    Besten Dank und erfolgreiches proggen..

    Ollow



  • Es sollte bestenfalls gar nicht so weit kommen.
    Poste mal mehr von deinem Quellcode. In welcher Konstellation tritt das Problem auf?



  • Ups, jetzt hab ich beim posten etwas entscheidendes vergessen zu schreiben.

    Die Zugriffsverletzung kommt nur dann zustande wenn ich z.B. in den Aufruf der Funktion statt einem wxString z.B. einen int übergebe.

    Hier mal der Code in dem der Aufruf der Funktion ohne Probleme geht

    meinFunktion(2, _T("index_1"), _T("index_2"));
    

    bei dem Quellcode kommt dann die Zugriffsverletzung:

    meineFunktion(2, _T("index_1"), 25)
    

    Wollte mit dem Try & catch eigenlich erreichen, das wenn versehentlich falsche Werte in die Funktion übergeben werden, diese ignoriert werden. Aber das es sich zum Zugriffsverletzung und nicht um eine Exception handelt wird dies evtl. gar nicht möglich sein.



  • Gut, das ist dann klar. Wenn du diese Funktion aufrufst

    meineFunktion(2, _T("index_1"), 25)
    

    dann macht das hier bumm.

    wxString str = va_arg(para, wxString);
    

    va_arg erwartet als zweiten Parameter den Typ. Siehe hier:
    http://msdn.microsoft.com/en-us/library/kb57fad8(VS.71).aspx

    Du gibst zwar wxString an, es ist aber ein int.



  • Genau und ich hatte gehofft dieses "BUM" ließe sich mit einer
    try & catch() struktur abfangen.

    Das wenn er was anders reinbekommt als einen wxString er in den catch geht diesen abarbeitet (bei mir in dem Fall den Wert ignoriert) und halt nicht aus dem Programm aussteigt...

    Aber dies wird jetzt nach doch einiger Prüfung und versuchen nicht möglich sein. Trotzdem mal besten dank...



  • Wenn du mit RTTI kompilierst kannst du den Typ der Variable sehr wohl abfragen. Siehe hierzu typeid:
    http://msdn.microsoft.com/en-us/library/fyf39xec.aspx


  • Mod

    Source2702 schrieb:

    Wenn du mit RTTI kompilierst kannst du den Typ der Variable sehr wohl abfragen. Siehe hierzu typeid:
    http://msdn.microsoft.com/en-us/library/fyf39xec.aspx

    Kann er nicht, wenn es sich um variable Anzahl von Parametern handelt.
    Woher weißt Du ob es ein int auf dem Stack ist oder ein Pointer, oder ein Objekt?

    Deshalb muss bei printf ja auch der Formatstring vorhanden sein, der angibt, wie die Daten auf dem Stack zu interpretieren sind...



  • Stimmt, daran hatte ich nicht gedacht.



  • Sehe schon das mit nichts anders übrig bleibt als mit dem vermeintlichen Eingaberisiko zu leben, oder das Konzept zu ändern.

    Besten Dank....


Anmelden zum Antworten