C/malloc: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
Derbeth (dyskusja | edycje)
Anulowanie wersji nr 127166 utworzonej przez 93.105.138.110 (dyskusja) bzdura, sprawdzone przy gcc -Werror -Wall -pedantic -ansi
Derbeth (dyskusja | edycje)
m →‎Uwagi: "i" zmiękcza "l", nie może być między nimi apostrofu
Linia 78:
Użycie rzutowania przy wywołaniach funkcji malloc, realloc oraz calloc w języku C jest zbędne i szkodliwe. W przypadku braku deklaracji tych funkcji (np. gdy programista zapomni dodać plik nagłówkowy [[C/Biblioteka standardowa/Indeks tematyczny#stdlib.h|stdlib.h]]) kompilator przyjmuje domyślną deklaracje, w której funkcja zwraca int. Przy braku rzutowania spowoduje to błąd kompilacji (z powodu niemożności skonwertowania liczby na wskaźnik) co pozwoli na szybkie wychwycenie błędu w programie. Rzutowanie powoduje, że kompilator zostaje zmuszony do przeprowadzenia konwersji typów i nie wyświetla żadnych błędów. W przypadku języka [[C++]] rzutowanie jest konieczne.
 
Zastosowanie operatora sizeof z wyrażeniem (np. <tt>sizeof *tablica</tt>), a nie typem (np. <tt>sizeof float</tt>) ułatwia późniejszą modyfikację programów. Gdyby w pewnym momencie programista zdecydował się zmienić tablicę z tablicy floatów na tablice double'idoubli, musiałby wyszukiwać wszystkie wywołania funkcji malloc, realloc i calloc, co nie jest konieczne przy użyciu operatora sizeof z wyrażeniem.
 
Ponieważ dla parametru <tt>size</tt> równego zero funkcja może zwrócić albo wskaźnik różny od wartości NULL albo jej równy, zwykłe sprawdzanie poprawności wywołania poprzez przyrównanie zwróconej wartości do zera może nie dać prawidłowego wyniku.