wert wird überschrieben



  • Hallo,

    hab ein problem, dass meine variable ständig von anderen werten überschrieben wird.

    main.c

    #include "main.h"
    #include "init.h"
    
    int main(void)
    {
       Stat_Init();   //stat.c
       //bis jetzt hat nbr_ptr noch den richtigne wert
    
       Init(); 
    
    }
    
    void Init(void)
    {
       //jetzt hat nbr_ptr nicht mehr den wert 10 sondern 0
    
    }
    
    stat.c
    
    unsigend short *nbr_ptr; 
    
    void Stat_Init(void)
    {
      unsigned short nbr = 10;
    
      nbr_ptr = &nbr;  
    
    }
    

    stat.h

    extern unsigned short *nbr_ptr;
    

    Wie kann ich es ändern, dass die Variable nicht die ganze Zeit überschrieben wird?

    Udo



  • nbr_ptr zeigt auf eine lokale Variable, die nur in Stat_Init gültig ist. Nach der Funktion, wird der Speicher wieder freigegeben.

    Schau dir mal malloc/free an, damit würde sowas gehen 😉



  • Du könntest nbr auch als lokale Variable der main-Funktion deklarieren und an die jeweiligen Funktionen einen Pointer übergeben. Möglich, aber nicht unbedingt sinnvoll, wäre auch eine globale Variable...



  • Eine weitere Möglichtkeit wäre es die Variable als static zu deklarieren.

    static unsigned short nbr = 10;
    

    Dann bleibt diese auch nach dem Verlassen der Funktion erhalten. Aber vorsichtig damit umgehen. Statische Variablen können ein Programm leicht unübersichtlich machen.



  • Udo g schrieb:

    Wie kann ich es ändern, dass die Variable nicht die ganze Zeit überschrieben wird?

    Indem du die Funktionen so schreibst, das die Variable zu an der Stelle geändert wird, die du als angebracht betrachtest.


Anmelden zum Antworten