globales Array, benötige Hilfe



  • Hallo,

    mein Programm hat folgende Struktur:

    Die main befindet ich in einer Datei main.c

    // main.c
    #include "functions.h"
    ...
    void main (void)
    {
        init();
        ...
        send_id();
    }
    

    Weitere Funktionen befinden sich in functions.c

    //functions.c
    #define VAR_DEF
    #include "functions.h"
    
    void init(void)
    {
         ...
         calc_CRC();
         ...
    }
    
    void calc_CRC(void)
    {
        fam_key_array[i] = ...  //initialize fam_key_array
    }
    
    void send_id()
    {
        ... = fam_key_array[i];
    }
    

    Beide Dateien binden einen Header header.h ein

    // header.h
    #ifdef VAR_DEF
    	#define EXTERN 
    #else
    	#define EXTERN extern
    #endif
    
    #ifndef _abs_
    	#define _abs_ 
    
    ...
    EXTERN char fam_key_array[64]
    ...
    #endif  //_abs_
    

    In der main.c befindet ich der Aufruf der Funktion init() welche sich in function.c befindet. init() ruft wiederrum calc_CRC() auf, welche sich ebenfalls in functions.c befindet.
    calc_CRC() beschreibt fam_key_array[].
    Danach springt das Programm wieder in die main zurück und von dort wird anschliessend die Funktion send_id() aus functions.c aufgerufen, welche fam_key_array[] nutzen soll, allerdings ist fam_key_array[] zu diesem Zeitpunkt wieder leer, also mit nullen gefüllt.

    Kann mir jemand sagen was hier falsch läuft? 😕

    Ich hab fam_key_array[] doch mit extern... global definiert.

    Vielen Dank im Voraus

    Gruß
    Kristian



  • Hi !

    So kann man eigentlich nur raten, ohne den Quellcode zu sehen. Geh doch mal mit einem Debugger durch, das führt am schnellsten zum Ziel.
    Oder lass dir zwischendurch das Array ausgeben, dann findest du auch so den Übeltäter.

    Gruß,
    B.B.



  • Hi B.B.

    ich dachte, dass etwas grundlegendes an meiner Deklaration falsch ist. Aber ich hab den Übeltäter gefunden. Ich habe noch ein weiteren Array deklariert,

    int temp[30]

    Ich habe eine Schleife die dieses Array mit 0 beschreiben soll, habe aber als Abbruchbedingung i<50 definiert. Also schreibe ich munter über den eigentlichen Speicherbereich des Arrays hinaus und überschreibe alles was dahinter liegt gleich mit. Den Compiler ist das anscheinend egal. 😃

    Naja, Danke für deine Antwort

    Gruß
    Kristian


Anmelden zum Antworten