рассмотрите следующий код:
int main()
{
int *a,address,size;
a= (int *) malloc(10);
address=(int*) a-1;
size=(int ) *(a-1); // sorry there was a bug wrong casting, now its corrected.
printf("address of malloc n:%d\n",address);
printf("size of malloc block b:%d\n",size);
printf("before%p",a);
a=a+1;
printf("\n after%p",a);
free(a);
getch();
}
Адрес malloc "a" был увеличен, а затем освобожден (a + 1). Это приведет к утечке памяти, но как освободить будет знать конечную точку, пока не освободится, чтобы по ошибке не освободить следующий кусок памяти? Есть ли маркер конца, как в Char Array - '\ 0'?
Я прочитал в разделе 8.7 главы 8 K & R, что free поддерживает список, из которого свободные узнают, куда следует добавить блок свободной памяти.
Есть ли размер, из которого таблица объявлена malloc? Тогда как будет работать приведенный выше код, я думаю, это был свободный список, верно? Просто добавим бесплатный связанный список, то есть +1 только к словам. и забудьте о другом месте памяти, которое приведет к утечке памяти.
Но когда вы выполняете malloc (), я прочитал, что он возвращает указатель-1 и даст размер выделенного блока malloc, я прав?
Может кто-нибудь объяснить это подробно?
Вопрос не связан с Кодексом. вот как точно работают функции Malloc и free друг с другом. если я скажу free (a), как точно функция free узнает конец блока?