problem mit globalen variablen
-
und lists_ ist dann trotzdem in allen funktionen verwendbar?! super, danke für die hilfe!!
wegen meiner fehlerhaften main: das war nur zur illustration wie ich die variable im prinzip deklariert habe.
Sebastian
-
sebhofer schrieb:
und lists_ ist dann trotzdem in allen funktionen verwendbar?! super, danke für die hilfe!!
ja, deshalb ist lists_ eine globale Variable, oder?
-
Die main ist nicht wirklich fehlerhaft, es ist nur eine veraltete Schreibweise. In C89 war so ziemlich alles implizit int, wenn es nicht anders deklariert wurde, von daher ist
main(argc, argv) char *argv[]; /* <-- noch eine veraltete Schreibweise */{ }
das selbe wie
int main(int argc, char *argv[]) { }
In C99 ist das allerdings nicht mehr zulässig, und es ist eigentlich generell ganz sinnvoll, den Typen dran zu schreiben - verbessert die Lesbarkeit des Codes.
-
sebhofer schrieb:
struct StructName **lists_ = malloc(MULTIPL * sizeof(struct StructName *)); main() { }
mein compiler gibt mir da immer ein fehlermeldung, ähnlich wie "initializer not konstant" oder so.
eher "invalid conversion...."
malloc gibt einen void* zurück, der typecast fehlt dir.
so geht's:struct StructName **lists_ = (StructName**)malloc(MULTIPL * sizeof(struct StructName *)); main() { }
-
Hallo,
net schrieb:
malloc gibt einen void* zurück, der typecast fehlt dir.
und genau deswegen muss die stdlib.h eingebunden werden, denn dann kann auf den Cast komplett verzichtet werden. Ansonsten liefert malloc nämlich int zurück (da der Prototyp nicht bekannt ist) und somit wäre auch ein Cast notwendig.
-
erstmal danke an alle für die mithilfe.
mittlerweile bin ich aber wieder etwas verwirrt.@ net:
supertux' lösung kam mir recht einleuchtend vor. du sagst aber wieder, dass es nur an dem fehlenden cast liegt.
wem soll ich jetzt glauben!? (kann's im mom nicht ausprobieren)
ich glaube dass supertux' lösung eher funktioniert.thx
Sebastian
-
CarstenJ schrieb:
net schrieb:
malloc gibt einen void* zurück, der typecast fehlt dir.
und genau deswegen muss die stdlib.h eingebunden werden, denn dann kann auf den Cast komplett verzichtet werden. Ansonsten liefert malloc nämlich int zurück (da der Prototyp nicht bekannt ist) und somit wäre auch ein Cast notwendig.
macht bei mir keinen unterschied. ob ich stdlib.h reinnehme oder nicht, den typecast brauche ich immer sonst mault der compiler (mingw)
sebhofer schrieb:
supertux' lösung kam mir recht einleuchtend vor. du sagst aber wieder, dass es nur an dem fehlenden cast liegt.
wem soll ich jetzt glauben!? (kann's im mom nicht ausprobieren)
ich glaube dass supertux' lösung eher funktioniert.also mingw frisst beide....
-
Hallo,
sicher, dass das kein C++ Projekt ist?
-
-
sebhofer schrieb:
@net:
ok, thx@CarstenJ:
*gg* ja, aber das ist auch das einzige, bei dem ich mir sicher bin.Jo, bei dir bin ich mir auch sicher, aber ich meinte net.
Denn bei C++ ist ein Casten bei malloc sehr wohl notwendig.
-
da hab ich dann wohl was falsch verstanden *lol*
sorry
-
CarstenJ schrieb:
sicher, dass das kein C++ Projekt ist?
jo, das wars.
das file hiess zwar .c aber er hat's doch als c++ compiliert.
jetzt kommt auch das "initializer element is not constant"sch.... mingw dev studio!