Eventuali duplicati:
C programming : How does free know how much to free?In che modo free() conosce la quantità di memoria da distribuire?
Durante la programmazione in C, io spesso uso malloc()
per allocare la memoria e free()
per rilasciarla:
MyObject* objArr= (MyObject*) malloc(sizeof(MyObject)*numberOfObjects);
/** Do stuff **/
free(objArr);
Come si fa free()
sapere quanta memoria deallocare? malloc()
crea una tabella da qualche parte per ricordare i puntatori e la quantità di memoria a cui puntava ciascun puntatore?
Se questo è il caso, sarà free()
fallire se rinominare il puntatore? es .:
MyObject* objArr= (MyObject*) malloc(sizeof(MyObject)*numberOfObjects);
MyObject* newPtr= objArr;
free(newPtr); /** Does this fail? **/
Cosa succede se incrementare il puntatore e poi corro free()
? ad esempio:
MyObject* objArr= (MyObject*) malloc(sizeof(MyObject)*numberOfObjects);
newPtr++;
free(newPtr); /** What happens now? **/
Disabilita un ulteriore blocco di memoria appena fuori dalla fine dell'array originale?
Duplicato di http://stackoverflow.com/questions/1518711/c-programming-how-does-free-know-how-much-to-free – codaddict