Variable verliert scheinbar grundlos ihren Wert



  • der punkt ist, dass ich ca. 20 andere funktionen habe, die genauso aufgebaut sind und alle funktionieren einwandfrei... nur dieser eine kleine %&§&%!!! will nicht mitspielen...

    wenn ich bei vs auf beobachten der variable schalte, dann gibt der mit auch in der aufrufenden datei den korrekten wert an, aber genau wenn die aufgerufene funktion fertig ist und zurückkehrt, genau dann verliere ich plötzlich den wert.



  • Gaaaaanz einfachen Beispiel:

    void quadrieren(int);
    
    void quadrieren(int a){
      a=a*a;
      // laut Debugger ist hier a=25!!!!
    }
    
    int main(){
    int a=5;
    quadrieren(a);
    cout << a;
    }
    

    mist, es wird immer 5 ausgegeben, dabei stimmt der Wert von a doch in der Funktion 😕



  • oder denk ich jetzt falsch, das ganze verwirrt mich grad ein bischen, ich geh mal duschen, bis gleich



  • Hi,

    dein Beispiel ist schon richtig 🙂 (ein sooooo blutiger Anfänger bin ich aber eigentlich nicht mehr)...

    nur... die funktionsdeklaration ist:

    short createMsg(char *msg, short *length, char *to, char *to_name, char *from, char *from_name, char *txt, char **buddies, short *num_buddies);
    

    es ist mir schon klar: ich bin ein zeiger freak... aber so mag ich's 🙄

    die msg-variable ist daher ein zeiger und kann somit durchgereicht werden, ich habe immer direkten zugriff darauf und genau deshalb kapier ich nicht, warum dieses blöde programm da mist macht...



  • Der Aufruf von realloc weist dem Pointer in der Funktion eventuell einen neuen Wert zu, aber nicht dem Pointer in der Aufrufenden Funktion. Dieser zeigt immer noch auf den alten Bereich, der evenutell nun ungültig geworden ist.



  • ja, genau, du kannst alle Werte im Speicherbereich ändern, auf den msg zeigt, aber um msg aus einer funktion heraus woandershin zeigen zu lassen muust du die Adresse von msg übergeben, also DOPPELPOINTER!!!! sag ich doch, du Zeiger-Freak

    in der Deklaration "char **msg" und beim Aufruf "&varname"



  • Acid-Sky schrieb:

    nur... die funktionsdeklaration ist:

    short createMsg(char *msg, short *length, char *to, char *to_name, char *from, char *from_name, char *txt, char **buddies, short *num_buddies);
    

    es ist mir schon klar: ich bin ein zeiger freak... aber so mag ich's 🙄

    aber ich nicht. hinweg ins c-forum.



  • Dieser Thread wurde von Moderator/in volkard aus dem Forum C++ in das Forum ANSI C verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • return doch einfach die msg 👍

    ist doch klar das msg einen falschen wert hat wenn du in der funktion ein realloc machst
    , wenn realloc das array nicht erweitern kann muss es es irgendwo anders hinkopieren.

    mein tipp wär noch pack das ganze in eine strukt sonst hast so viele parameter 😉



  • david_14 schrieb:

    mein tipp wär noch pack das ganze in eine strukt sonst hast so viele parameter 😉

    jo, das wäre klasse.
    das wäre ja schon fast objektorientiert.
    wenn er das jetzt macht, hätte ich den thread gar nicht verschieben müssen. 🙂


Anmelden zum Antworten