va_arg() mit try & catch abfangen



  • Hallo Community, habe folgenden Code:

    void BasicFrame::ParaMitWxString(int anzahl, ...)
    {
        va_list para;
        ca_start(para,anzahl);
        for (int i=0; i<anzahl; i++)
        {
             wxString str = va_arg(para, wxChar*);
        }
        va_end(para);
    }
    

    Das Problem ist nun wenn über den "..." z.B. ein 'int' reinkommt steigt mir das komplette Programm aus. Mit 'Zugriffsverletzung beim Lesen an Position'.

    Würde das ganze gerne in einer try & catch struktur haben

    void BasicFrame::ParaMitWxString(int anzahl, ...)
    {
        va_list para;
        ca_start(para,anzahl);
        for (int i=0; i<anzahl; i++)
        {
             try
             {
                  wxString str = va_arg(para, wxChar*);
             }
             catch( ??? )
             {
                  // tue was anders
             }
        }
        va_end(para);
    }
    

    Meine Frage nun dazu mit welchem 'catch( ??? )' fange ich eine Zugriffsverletzung ab, bzw. ist dies überhaupt möglich ??

    Mfg
    Ollow



  • Ist nicht möglich, genauso wenig, wie z.B. das Dereferenzieren eines 0-Zeigers per try-catch abfangbar ist (es gibt eine Zugriffsverletzung, keine Exception).
    Generell sind variable Argumentlisten sehr unsicher, deshalb sollte man sie in C++ möglichst versuchen zu vermeiden. Es gibt (anders als in C) wesentlich sicherere Möglichkeiten, beliebig viele Argumente zu übergeben (üblicherweise mit überladenen Operatoren). Mit C++0x und den Variadic Templates sogar bald mit Funktionssyntax.



  • Das habe ich befrüchtet das dies so nicht funktioniert.

    Aber trotzdem mal besten dank


Anmelden zum Antworten