Paramtertübergabe in main (... prüfen



  • Hallo,

    Sorry ich wusste nicht wirklich wonach ich suchen sollte 🙂

    Anbei meine Frage:

    Man nehme:

    int main (int argc, const char *argv[]) {
    
    ....
    
    string intjn;
    if (argv[3]) intjn = argv[3];
    
    ...
    

    Nun meine Frage / Problem:

    Wenn ich keine Parameter übergebe, kommt es zu einem Bad Pointer 🙂

    Um dieses zu vermeiden frage ich momentan argc ab um festzustellen, ob die Anzahl der übergebenen Parameter passt. Damit funktioniert das Ganze auch.

    Nun meine Frage gibt es eine Möglichkeit vor

    if (argv[3]) intjn = argv[3];
    

    zu prüfen ob argv[1...2...3...] gültig sind?

    Danke......

    Gruß,
    Marcus



  • Was genau meinst Du? Geht es um folgendes?

    if (argc > 3 and argv[3]) …
    

    Oder was meinst Du sonst mit „gültig“?



  • ...

    Ja genau darum geht es mir.

    Wenn ich das bisher mit meinem Newbee Verständnis richtig begriffen habe, bekomme ich wenn ich nicht prüfe und auch keine Parameter übergebe und dann auf argv[3] zugreife einem Bad Poniter. Richtig?.

    Die Frage müsste dann wohl korrekt heißen:

    Kann ich prüfen ob ein Pointer hier (argv[x]) ein Bad Pointer ist und ich somit auf den Check argc <= xy verzichten KÖNNTE.

    Gruß,
    Marcus



  • Nein, kannst Du tatsächlich nicht. Per Definition ist argv[n] nur dann gültig wenn n < argc ist. Jeder Zugriff auf ein ungültiges Arrayelement (gilt für jedwedes Array) erzeugt undefiniertes Verhalten.



  • Danke!

    Vorerst letzte Frage. Ist das Verständnis mit dem bad pointer richtig oder habe ih da was falsch verstanden?

    Gruß,
    Marcus



  • Nunja, "bad Pointer" ist englisch für "schlechter Zeiger" - insofern vollkommen zutreffend. Falls Du damit aber meinst, dass der Zugriff auf einen schlechten Zeiger zu einem Fehler führen muss: Das muss es nicht. Undefiniertes Verhalten bedeutet, dass irgendwas passiert, normalerweise liest Du Datenmüll oder das Programm stürzt ab.



  • Ok

    Dann will ich das nochmal für mich sortieren.

    Was allerdings an der Stelle im Speicher steht ist dann eine ganz andere Frage.

    Oder gibt es noch eine andere/richtige Form von Bad Pointer?

    Gruß,
    Marcus



  • stom2006 schrieb:

    Was allerdings an der Stelle im Speicher steht ist dann eine ganz andere Frage.

    Na ja, das ist alles eine Frage, wie man „bad“ definiert. Es *kann* durchaus zu einem Crash kommen. Visual C++ im Debug-Modus z.B. beendet das Programm sang- und klanglos.

    Theoretisch (praktisch wohl eher nicht) könnte der PC aber auch beginnen, Deine Festplatte zu löschen und gleichzeitig rosarote Seifenblasen auf Deinen Bildschirm zu zaubern, wenn Du versuchst, einen ungültigen Zeiger zu lesen.

    „Undefiniertes Verhalten“ ist eigentlich ein Synonym für „Katastrophe“. Als Beispiel: Die Ariane 5 ist aufgrund undefinierten Verhaltens abgestürzt. Ein *definiertes* Fehlverhalten hätte hingegen kein größeres Problem ergeben. Von daher würde ich sagen: ein undefinierter Zeiger *ist* „bad“.



  • Danke euch!

    Gruß,
    Marcus


Anmelden zum Antworten