Возможный дубликат:
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? **/
Будет ли он освобождать дополнительный кусок памяти сразу после конца исходного массива?