View Full Version : [C] Realloc
Uso generalmente raealloc per riallocare nuova memoria in coda ad una parte già esistente. Vorrei chiedervi se con la medesima funzione è possibile deallocare memoria, ad esempio se ho allocato precedentemente n elementi con malloc, chiamando successivamente realloc definendo come ampiezza m (m<n), vorrei sapere se gli n-m elementi di differenza vengono deallocati e quindi riutilizzabili dal programma o diventano garbage. Grazie.
VegetaSSJ5
30-04-2005, 12:06
ho letto su un testo che lo standard C99 prevede che la realloc riallochi proprio la memoria, nel senso che lo spazio prima occupato viene liberato e viene allocato un nuovo spazio che può cominciare solo per coincidenza dove cominciava il vecchio. quindi il problema di m che sia maggione o minore di n non si pone visto che comunque un vettore (o più in generale un'area di memoria) viene sempre deallocato.
Quindi se ad esempio effettuo a=(int *)malloc(5*sizeof(int)) e successivamente a=(int *)realloc(a,2), i 3 elementi vengono deallocati e non costituiscono alcun pericolo di garbage?
Ed_Bunker
01-05-2005, 09:10
Quindi se ad esempio effettuo a=(int *)malloc(5*sizeof(int)) e successivamente a=(int *)realloc(a,2), i 3 elementi vengono deallocati e non costituiscono alcun pericolo di garbage?
Con la realloc() o liberi memoria (Potresti allora utilizzare direttamente la free) oppure allochi nuova memoria a quella gia' allocata.
Dal man:
void *realloc(void *ptr, size_t size);
realloc() changes the size of the memory block pointed to by ptr to size bytes. The contents will be unchanged to the minimum of the old and new sizes; newly allocated memory will be uninitialized. If ptr is NULL, the call is equivalent to malloc(size); if size is equal to zero, the call is equivalent to free(ptr). Unless ptr is NULL, it must have been returned by an earlier call to malloc(), calloc() or realloc().
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.