Mit malloc() ein mehrdimensionales Array reservieren ??
-
nichtsdestotrotz ist C kein C++ und das casten von pointern auf void ist grober unfug.
wenn der compiler nervt, sollte man ueberlegen wieso und nicht einfach irgendwas machen, damit er nicht mehr nervt...
-
ich habe grad noch mit dem gcc compiler colmpiliert und er braucht ein cast. wie schon gesagt malloc gibt ein void pointer zurüch deshalb der cast. Egal ob c oder cpp.
Lieben gruß
-
Dadda schrieb:
ich habe grad noch mit dem gcc compiler colmpiliert und er braucht ein cast. wie schon gesagt malloc gibt ein void pointer zurüch deshalb der cast. Egal ob c oder cpp.
Lieben grußfalsch. ansi c standard und gcc geben mir recht, in c muessen void* nicht gecastet werden und gcc meckert auch nicht.
zeig doch mal deine compilerflags und die endung deiner datei.
-
Dann kannst Du den gcc nicht bedienen:
$ cat foo.c #include <stdlib.h> int main(void) { int *foo = malloc(sizeof(int)); free(foo); return 0; } $ gcc -W -Wall foo.c $ gcc -W -Wall --std=c99 foo.c $
-
Erstmal entschuldigung: Ihr habt natürlich recht es kommt kein fehler aber eine warnung die wie folgt lautet assigment makes pointer from integer without cast ok
-
Dadda schrieb:
Erstmal entschuldigung: Ihr habt natürlich recht es kommt kein fehler aber eine warnung die wie folgt lautet assigment makes pointer from integer without cast ok
Dann hast Du anscheinend vergessen, stdlib.h zu inkludieren. Das ist ein Problem, das man durch einen Cast nur scheinbar beheben kann.
-
Erstmal entschuldigung: Ihr habt natürlich recht es kommt kein fehler aber eine warnung die wie folgt lautet assigment makes pointer from integer without cast ok
-
ach es gibt schlimmere fehler als ein cast zu viel crackwitz mein freund, da bricht noch keine welt zusammen
-
Hier liegt aber offenbar genau ein Fall vor, wo der Prototyp fehlt (weil stdlib.h nicht eingebunden), der Compiler also VERMUTET, daß int zurückgegeben wird. Die Umwandlung von void* nach int muß aber überhaupt nicht funktionieren und kann auch 'komische' Werte liefern. Wenn man jetzt hier castet, dann verdeckt man diese Warnung und das Programm wird sich auf einigen Systemen völlig falsch verhalten.
In C++/C99 ist das alles kein Problem, dort compiliert das Programm gar nicht erst, wenn stdlib.h nicht eingebunden wurde.
-
Dadda schrieb:
Erstmal entschuldigung: Ihr habt natürlich recht es kommt kein fehler aber eine warnung die wie folgt lautet assigment makes pointer from integer without cast ok
wie meine Vorgänger bereits sagen, du hast vielleicht keine stdlib.h includiert. Aber ein Problem hast du immer noch, denn durch casten hast du nur die Warnung ausgeschaltet, nicht das Problem, ist das wäre, dass der Compiler keine Ahnung hat, wie die Funktion malloc aussieht, als int, als void, als double, als ... das weiß eben nicht der Compiler.