Warum funktioniert der code nicht?



  • Hi,

    ich hab diese zwei Dateien:

    main.c
    
    extern x;
    
    int main(void)
    { inc(x);
    
      printf("%i",x);
    
      return 1;
    }
    
    test.c
    
    int x=0;
    
    void inc(int *i)
    { (*i)++;
    }
    

    Ich benutze Linux und wenn ich das mit 'gcc -Wall -c test.c && gcc -Wall test.o main.c' compiliere (geht ohne Probleme und Warnungen) und dann mit './a.out' ausfuehre, bekomme ich einen Segmentation fault.
    Was stimmt mit dem code denn nicht??? Mir faellt wirklich keine logische Lsg. ein!

    Bis denne...

    PS: Koennte es sein, dass das ein bug in gcc ist?



  • Das Problem ist zunächst, dass inc einen Pointer auf int erwartet, du aber ein int übergibst. Richtig wäre es so: inc(&x);

    Es gibt aber noch ein viel tieferliegendes Problem: Hättest du die Funktion deklariert, bevor du sie aufrufst, hätte dir der Compiler das gesagt. Warum machst du das nicht? So ist es jedenfalls ausserordentlich schlechter Stil.



  • das mit dem & hab ich nur grad beim abtippen falsch geschrieben... im originalprogramm war das richtig. dass ich die Funktion nicht deklariere hab ich mal so weggelassen, weils nur ein test ist/war... mit dekl. funktionierts auch nicht...


Anmelden zum Antworten