[cdev] задача 4, 135гр

rg-400 на list.ru rg-400 на list.ru
Ср Дек 1 23:32:16 MSK 2010


Еще в parray_delete_range

memmove(pa->data + nth, pa->data + pa->nelems, ((pa->nelems - 1 -
nth))*sizeof(void *));

Прочитайте еще раз, что делает memmove.

pa->data + pa->nelems, адрес по которому уже нет элементов массива, там
лежит что-то другое.

И уж если у пользователь вашей функции попросил освободить больше чем у
вас есть, то нужно освободить только то, что относиться к вашему массиву
указателей.(На самом деле можно либо почистить память memset и уменьшить
количество элементов до nth, либо просто уменьшить количество элементов
до nth и ничего не чистить)

memmove(pa->data + nth, pa->data + nth+count, (pa->nelems -(count -
nth))*sizeof(void *));

тут аналогия с предыдущим замечанием
возьмем такие же значения pa->nelems = 10; nth = 3; count = 4
получим
pa->nelems -(count - nth) = 10 - (4 - 3) = 9
явно не то, что ожидалось.






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