[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