Ale wtedy kaszana się robi z return "Hello, World!"; skądże wywołującemu wiedzieć, ze tym razem nie jest to alokowana tablica, tylko stały string.
W takich przypadkach, dokumentacja (khe, khe) powinna jasno mówić, że obiekt zwracany przez funkcję Foo()
ma być zwalniany funkcją free()
czy jakimś innym DeleteFoo()
– a Foo()
wtedy musi zawsze zwracać obiekt zwalnialny tą funkcją. Czyli nie może raz robić return "Hello, world", a za innym razem używać malloc.
ten problem jest typowy dla podobnych funkcji C, jest to jedna ze słabości tego języka, i wymaga dobrego określenia (dokumentacji) jak używać funkcję > ("funkcja zwraca nowo alokowaną tablicę, którą należy zwolnić"), i zdyscyplinowanego programisty, który będzie jej posłuszny.
Za to zachęca do czytania dokumentacji, a nie tylko listy metod pod ctrl+spacja :)
Przykład takiej dokumentacji - funkcja GetDC() z WinAPI. W sekcji Remarks napisano kiedy trzeba (a kiedy nie) użyć ReleaseDC:
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getdc
After painting with a common DC, the ReleaseDC function must be called to release the DC.
Class and private DCs do not have to be released. ReleaseDC must be called from the same thread that called GetDC.
The number of DCs is limited only by available memory.