[cdev] Дайджест списка рассылки cdev; том 3, выпуск 1

lenad89 lenad89 на list.ru
Чт Апр 1 12:32:36 MSK 2010


Ну так и нужно освободить массив указателей. Если ты сначала удалишь
queue, то потеряешь указатель на этот массив. 
Ты выделяешь память только два раза :
1) Под хранение структуры prioq; 
2) Под массив указатлей (в structprioq_head **heap) (потом увеличиваешь
этот массив если нужно);
значит тебе и нужно освободить сначала массив указателей, а потом уже и
структуру.

поля used, size будут только до вызова free(queue), ты же выделил память
под хранение указателя и эти поля.

Кстати там все равно косяк какой-то с памятью :)

и еще вот (это скорее всего опечатка):

memset(queue->heap + OLD_SIZE(queue), 0,
       NEW_SIZE(queue) - OLD_SIZE(queue));
queue->size += GROW_SIZE;
queue->heap = tmp;
- не верно, нужно поставить queue->heap = tmp перед memset ;

У тебя указатель queue->heap указывает на старый блок памяти, а новый
лежит по указателю tmp. Т.е. ты чистишь старую память(за пределами этой
памяти), в не новую. Нужно поместить queue->heap адрес нового участка и
потом уже его использовать.

p.s: ты залез не в ту тему :)





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