PDA

View Full Version : [C] Realloc


osa
30-04-2005, 11:44
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.

osa
30-04-2005, 15:45
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().