Possible en double:
C programming : How does free know how much to free?Comment free() sait combien de mémoire libérer?
Lors de la programmation en C, j'utilise souvent malloc()
pour allouer de la mémoire et free()
à libérer:
MyObject* objArr= (MyObject*) malloc(sizeof(MyObject)*numberOfObjects);
/** Do stuff **/
free(objArr);
Comment free()
savoir la quantité de mémoire désaffecter? Est-ce que malloc()
crée une table quelque part pour mémoriser les pointeurs et combien de mémoire chaque pointeur pointe-t-il?
Si tel est le cas, free()
échouera-t-il si je renomme le pointeur? .: par exemple
MyObject* objArr= (MyObject*) malloc(sizeof(MyObject)*numberOfObjects);
MyObject* newPtr= objArr;
free(newPtr); /** Does this fail? **/
Que se passerait-il si j'incrémenter le pointeur, puis exécutez free()
? .: par exemple
MyObject* objArr= (MyObject*) malloc(sizeof(MyObject)*numberOfObjects);
newPtr++;
free(newPtr); /** What happens now? **/
Sera-t-désaffecter une partie de la mémoire supplémentaire juste à côté de la fin du tableau d'origine?
Duplicata de http://stackoverflow.com/questions/1518711/c-programming-how-does-free-know-how-much-to-free – codaddict