Jak rozumiem, pytany zarezerwować większy blok pamięci, funkcja realloc() zrobi jedną z trzech rzeczy:Ustalenie realloc() zachowanie przed wywołaniem to
if free contiguous block exists
grow current block
else if sufficient memory
allocate new memory
copy old memory to new
free old memory
else
return null
hodując obecny blok jest bardzo tanią operacją, więc takie zachowanie chciałbym wykorzystać. Jeśli jednak ponownie przydzielam pamięć, ponieważ chcę (na przykład) wstawić znak na początku istniejącego łańcucha, nie chcę, aby funkcja realloc() kopiowała pamięć. Kończę kopiowanie całego łańcucha za pomocą realloc(), a następnie skopiuję go ponownie ręcznie, aby zwolnić pierwszy element tablicy.
Czy można określić, co zrobi realloc()? Jeśli tak, czy można to osiągnąć w sposób międzyplatformowy?
Ostatnie z 3 przypadków jest niepoprawne, realloc zwróci wskaźnik zerowy, jeśli nie ma wystarczającej ilości pamięci, a nie wskazywanego wskaźnika. –
Jak powiedział Robert Gamble - realloc() zwraca NULL na brak pamięci. –
Dzięki temu poprawiono pseudokod. – Ant