Felix W. schrieb:
> /********************************
> * Arraydefinition über malloc()*
> *******************************/
> array = (int *) malloc(size * sizeof(int));
Mein Prof. hätte zu den Kommentar gesagt, "Ich kann lesen!", ein
Kommentar sollte sagen, warum man etwas macht und nicht was man macht.
Außerdem solltest du das malloc so schreiben:
1 | array = malloc( size * sizeof(*array))
|
Im C Standard wird dir garantiert das sich jeder Pointer nach (void *)
und wieder zurück casten lassen kann, ohne Eigenschaften zu verlieren.
Das heißt in diesen Fall, das der cast vom C Standard geschützt auch
implizit gemacht werden kann. Zusammen mit den sizeof des
dereferenzierten Array, sorgt der Code dafür das, wenn Array auf long
geändert wird das nur in der Deklaration gemacht werden muss und nicht
alle mallocs überprüft werden müssen.
Achtung, dass mit der implizieren cast geht nicht, wenn man einen C++
Compiler verwendet (aber dann sollte man besser C++ Code schreiben und
kein malloc verwenden)
Felix W. schrieb:
> printf("Bitte Programm neustart.\n");
> return 0;
Return 0, ist bei den meisten Programmen ein Erfolg, von daher ist der
Return code verwirrend. Außerdem gibt dein Programm einen Pointer
zurück, statt ein Integer und hier sind sich eigentlich alle einig, dass
eine solche Funktion im Fehlerfall NULL zurückgeben sollte. Zwar ist
eine gültige Definition von NULL, du solltest aber dennoch besser NULL
schreiben, um es den Leser einfacher zu machen, Sourcecode wird immer
öfter gelesen als geschrieben, daher ergibt es Sinn auf das einfache
Verstehen zu optimieren.
Felix W. schrieb:
> fscanf(ptr,"%d",&array[i]);
Denn return wert prüfen und eine gescheite Fehlerbehandlung einzubauen
tut nicht hier nicht weh.
Felix W. schrieb:
> free(ptr);
Auch wenn das vielleicht suggeriert wird ist
kein Filepointer, sondern ein Filehandle die Operation sollte also
fclose sein und nicht free, btw ptr ist mir den wissen vielleicht ein
suboptimaler Name.