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...