Beim Rückgabewert ==> Fehler!



  • Hallo,

    ich habe eine verschachtelte if-Abfrage in der Methode erstellt. Die Methode ist von Typ boolean. Nun, nachdem die Anweisung return durchlaufen wird, stürzt mir das das Programm ab, was ich überhaupt nicht verstehen kann...

    bool plausiOk = FALSE;
    ...
    ...
    ...
    if (comsiUserRole.GetName() == defaultUserRole.GetName()) {
        if (comsiUserCG.GetName() == defaultUserCG.GetName()) {
            if (lUBoundPSGc == lUBoundPSGd) {
                if (lUBoundSGc == lUBoundSGd) {
                    plausiOk = TRUE;
                } else {
                    plausiOk = FALSE;
                }
            } else {
                plausiOk = FALSE;
            }
        } else {
    	plausiOk = FALSE;
        }
    } else {
        plausiOk = FALSE;  //<-- Dieser Zweig wird aufgerufen
    }
    
    return plausiOk; //<-- Abbruch an dieser Stelle
    }
    

    In meinem Fall, wird die else-Anweisung von der ersten if-Abfrage aufgerufen, also der letzte else-Zweig...

    nachdem die Variable plausOk auf FALSE gesetzt wird, ruft er die Anweisung return auf und sollte in die einzhöhere Methode zurückspringen...macht er aber nicht, sondern gibt mir folgende Fehlermeldung aus...

    Nicht abgefangene Ausnahme in SCA.exe: 0xC0000005: Access Violation.
    

    ...weiss einer, warum er da abstürzt, also mir ist es völlig unverständlich...

    Gruss,

    chullain



  • Welchen Rückgabetyp hat die Funktion?

    Wenn der Rückgabetyp nämlich bool& ist, muss es ja einen Fehler geben, da "plausiOk" am Ende der Funktion zerstört wird, somit die Referenz ins leere zeigt, was undefiniertes VErhalten bedeuted -> Dein Fehler.



  • nein, kein Zeiger...

    bool compareUserAttributes(CString username, CString defaultname);
    


  • Könnte es auch sein, dass davor schon eine Unstimmigkeit auftritt?

    ...dass z.B. in der ersten if-Abfrage manche Objekte ins leere zeigen?

    ... und dass erst später sich auf das Programm auftritt, wie z.B. beim Rücksprung?



  • Wirfst du irgendwo ne Exception, die nicht gecatched wird?



  • ...hatte keinen try-catch-Block, jedoch habe ich festgestellt, dass ich ein Objekt abgefragt habe, welches null war, jedoch verstehe ich nicht, wieso er erst am Ende der Methode beim Rücksprung das Programm abgebrochen hat.

    ...auf jeden Fall bin ich jetzt weiter 🙂

    thx



  • btw:
    Ich glaube, du hast bool's noch nicht richtig verstanden. Zu bool gehört false und true, so definiert es jedenfalls der Standard. BOOL, FALSE und TRUE ist irgendwas API spezifisches und wird zB in der WinAPI genutzt.
    Code wie

    if (lUBoundSGc == lUBoundSGd) {
        plausiOk = TRUE;
    } else {
        plausiOk = FALSE;
    }
    

    wird ausserdem zu

    plausiOk = lUBoundSGc == lUBoundSGd;
    


  • naja, man kann ja nicht alles wissen, wie sagt man so schön, Übung macht den Meister...

    ...wie würdest Du diese Verschachtelung am Besten auflösen?...die ersten beiden if-Abfragen sind Strings, die nächst beiden sind integer-Werte...



  • Spring doch direkt raus, dann sparst du dir auch die zusätzliche Variable!

    if (comsiUserRole.GetName() == defaultUserRole.GetName())
        if (comsiUserCG.GetName() == defaultUserCG.GetName()) 
            if (lUBoundPSGc == lUBoundPSGd)
                if (lUBoundSGc == lUBoundSGd)
                   return true;
    return false;
    


  • das sieht ja gut aus, danke... 🙂



  • Oder:

    return((comsiUserRole.GetName() == defaultUserRole.GetName()) &&
           (comsiUserCG.GetName() == defaultUserCG.GetName()) &&
           (lUBoundPSGc == lUBoundPSGd) &&
           (lUBoundSGc == lUBoundSGd));
    

Log in to reply