mit C++ strings gescheit umgehen



  • Ups. In Zukunft werde ich es vorher durch den Compiler jagen.

    mfg



  • naja nun, es gibt halt einen speicherzugriffsfehler.
    er bleibt irgendwo in "free.c" hängen.
    Also das sacht mir persönlich nich viel.



  • Das bisschen Code, was du hier zeigst, ist korrekt. Ich würde dir empfehlen, (ggf. const) Referenzen zu nehmen anstatt Zeiger. Dann kannst du noch weniger falsch machen.



  • was sind const referenzen?
    es kommt dazu, dass die Funktion in eine DLL ausgelagert ist und per Funktionszeiger aufgerufen wird. Vielleicht liegts ja daran.
    Wenn du sagst das ist korrekt, werd ich das mal direkt mit in den Code der Exe implementieren, nur um zu sehen obs funktioniert.



  • ok es liegt wohl an der dll, aber dann isses wohl eher was für winapi oder?



  • OK, weiß nun woran es liegt:

    Wenn ich

    Funktion("","",&result);

    aurufe klappt es.

    Wenn ich

    Funktion(p1.c_str(),p2.c_str(),&result);

    aufrufe klappt es, wenn &result nicht zu lang wird,

    und

    Funktion(p1,p2,&result);

    klappt gar nicht. 😕



  • Die WinAPI sollte eigentlich keine gravierenden Fehler aufweisen. Ist es nicht so, dass die WinAPI Funktionen alle nen const char* übernehmen? Du übergibst aber nicht die Addresse von einem string-Objekt oder? (Naja, sollte eigentlich nicht so einfach gehen)

    Auf jeden Fall kann ich dir nur zu dem was sagen, was ich sehe, und das ist ein zwar fehlerfreier aber mehr als unschöner Code, bzgl. der Parameterübergabe.
    -> Objekte, wenn möglich, als const-Referenz oder Referenz übergeben. Manche bevorzugen bei veränderungen Zeiger um das zu kennzeichnen, aber IMO ist ne Referenz trotzdem irgendwie schöner.

    Und lies dir mal was über const-correctness durch, sehr interressantes Thema in C++. 🙂

    EDIT: Ach, du hast ja schon wieder was geschrieben. 😡 😉



  • unmighty_markus schrieb:

    OK, weiß nun woran es liegt:

    Aha.

    unmighty_markus schrieb:

    Wenn ich
    Funktion("","",&result);
    aurufe klappt es.
    Wenn ich
    Funktion(p1.c_str(),p2.c_str(),&result);
    aufrufe klappt es, wenn &result nicht zu lang wird,
    und
    Funktion(p1,p2,&result);
    klappt gar nicht. 😕

    Bist du dir sicher, dass du weißt, woran dieses Verhalten liegt?

    Benutz bitte deinen Debugger, damit kannst du den Fehler viel besser eingrenzen.



  • Optimizer schrieb:

    Die WinAPI sollte eigentlich keine gravierenden Fehler aufweisen.

    Huh?



  • ...und einen wunderschönen guten morgen.

    Auf jeden Fall kann ich dir nur zu dem was sagen, was ich sehe, und das ist ein zwar fehlerfreier aber mehr als unschöner Code, bzgl. der Parameterübergabe

    das ist korrekt. ich übergebe jetzt nur noch REFERENZEN und schau an, es klappt. ist sowieso sauberer. aber warum ich in einer hochsprache variablen nicht einfach so übegeben kann 😕 , hm. naja

    gruß und dank an alle



  • unmighty_markus schrieb:

    das ist korrekt. ich übergebe jetzt nur noch REFERENZEN und schau an, es klappt. ist sowieso sauberer. aber warum ich in einer hochsprache variablen nicht einfach so übegeben kann 😕

    bei "grossen" objekten rentieren sich referenzen (hier halt const string& bla),
    und natürlich kannst du die parameter auch mit nicht-referenzen machen,
    nur is das so wesentlich performanter ...


Anmelden zum Antworten