Я заранее прошу прощения, если это невероятно глупый вопрос ...
В настоящее время у меня есть круговой связанный список.Количество узлов обычно считается неизменным.Когда я хочу добавить к нему, я выделяю количество узлов (например, 100000 или около того) и склеиваю их. Эта часть отлично работает, когда я размещаю узлы по одному.
Я хочу попытатьсявыделить по блокам:
NODE *temp_node = node->next;
NODE *free_nodes = malloc( size_block * sizeof( NODE ) );
node->next = free_nodes;
for ( i = 0; i < size_block - 1; i++ ) {
free_nodes[i].src = 1;
free_nodes[i].dst = 0;
free_nodes[i].next = &free_nodes[i+1];
}
free_nodes[size_block - 1].next = temp_node;
Список работает до тех пор, пока я не пытаюсь освободить что-либо (ошибка «glibc обнаружено: двойное освобождение или повреждение»).Интуитивно, я думаю, это потому, что его освобождение не освобождает один узел, а циклический переход по обычному способу - попытка освободить его несколько раз (плюс освобождение всего блока, вероятно, приводит к отсоединению всех других указателей от узлов, которые все еще существуют?), но:
- Может ли кто-нибудь объяснить, пожалуйста, в явном виде, что происходит?
- Есть ли способ распределить узлы по блокам и не разбивать их?
Цель этого заключается в том, что я вызываю malloc сотни тысяч раз, и было бы хорошо, если бы все было быстрее.Если есть лучший способ обойти это, или я не могу ожидать, что это станет быстрее, я был бы также признателен за это.:)