[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