[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