Duplicar posible:
C programming : How does free know how much to free?¿Cómo sabe free() cuánta memoria desasignar?
Al programar en C, a menudo uso malloc()
asignar memoria y free()
para liberarlo:
MyObject* objArr= (MyObject*) malloc(sizeof(MyObject)*numberOfObjects);
/** Do stuff **/
free(objArr);
¿Cómo free()
saber la cantidad de memoria desasignar? ¿malloc()
crea una tabla en algún lugar para recordar punteros y cuánta memoria apuntaba cada puntero?
Si ese es el caso, se free()
fallar si puedo cambiar el nombre del puntero? ej .:
MyObject* objArr= (MyObject*) malloc(sizeof(MyObject)*numberOfObjects);
MyObject* newPtr= objArr;
free(newPtr); /** Does this fail? **/
¿Qué pasará si el puntero de la subasta y después ejecutar free()
? ej .:
MyObject* objArr= (MyObject*) malloc(sizeof(MyObject)*numberOfObjects);
newPtr++;
free(newPtr); /** What happens now? **/
Va a cancelar la asignación de una porción adicional de memoria junto a la final de la matriz original?
Duplicado de http://stackoverflow.com/questions/1518711/c-programming-how-does-free-know-how-much-to-free – codaddict