|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Dec 2004
Città: Napoli
Messaggi: 342
|
[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.
__________________
Il futuro lo conoscerete quando sarà arrivato, prima di allora dimenticatelo. (Eschilo) |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
|
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.
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Dec 2004
Città: Napoli
Messaggi: 342
|
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?
__________________
Il futuro lo conoscerete quando sarà arrivato, prima di allora dimenticatelo. (Eschilo) |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Jan 2004
Città: Montignoso(MS)
Messaggi: 9454
|
Quote:
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().
__________________
"Il Meglio che si possa ottenere è evitare il peggio." I.C. |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 17:35.



















