[cdev] Задача №4 (Кочев Владислав, Вахрушев Сергей)

Grigoriy A. Sitkarev sitkarev на komitex.ru
Пн Дек 5 21:38:25 MSK 2011


05.12.2011 20:16, Кочев Владислав пишет:
> Здравствуйте, страшно, но рискну  с Вами вступить в дисскусию.
> При нарушении формы ядра программа работать не будет, поэтому подскажите, где
> нарушение Kernel Normal Form?

Не тех боитесь.

KNF это стиль оформления Си программ.

> "Весь memory management у вас безобразный и сделан неверно".  Я выделяю память
> массиву и освобождаю ее при удалении элемента, в какой конкретно функции, что не
> так?

1. malloc(3) может не сработать и вернуть NULL. Нигде не проверяется что 
он возвращал.

2. realloc(3) может не сработать и вернуть NULL, в таком случае вы 
затрёте рабочий указатель на выделенный блок памяти в структуре.

3. Изменять размер блока памяти, где хранятся указатели, надо не каждый 
раз при добавлении, а сразу выделять блок большего размера а затем 
заполнять его, поддерживая счётчик занятых и выделенных мест для 
указателей. Если окажется, что места для добавления очередного указателя 
нет, тогда размер блока увеличивается в два раза, через realloc(3).

4. parray_free() должен освобождать все ресурсы, занимаемые массивом 
указателей. Кроме этого, его декларация не соответствует прототипу в 
заголовке, предложенного вам. Это важно.

Г.А.




Подробная информация о списке рассылки cdev