Возможный дубликат:
C-программирование: как бесплатно узнать, сколько бесплатно?
При программировании на C я часто использую malloc()
для выделения памяти и free()
для ее выпуска:
MyObject* objArr= (MyObject*) malloc(sizeof(MyObject)*numberOfObjects);
/** Do stuff **/
free(objArr);
Как free()
знает, сколько памяти освобождается? Создает ли malloc()
таблицу где-то, чтобы запомнить указатели и сколько памяти указала указатель на указатель?
Если это так, будет free()
сбой, если я переименую указатель? например:.
MyObject* objArr= (MyObject*) malloc(sizeof(MyObject)*numberOfObjects);
MyObject* newPtr= objArr;
free(newPtr); /** Does this fail? **/
Что произойдет, если я увеличиваю указатель и запустим free()
? например:.
MyObject* objArr= (MyObject*) malloc(sizeof(MyObject)*numberOfObjects);
newPtr++;
free(newPtr); /** What happens now? **/
Будет ли он освобождать дополнительный кусок памяти сразу после конца исходного массива?