Заранее извиняюсь, если это невероятно тупой вопрос...
В настоящее время у меня есть кольцевой связный список. Количество узлов обычно остается статичным. Когда я хочу его пополнить, я выделяю некоторое количество узлов (например, 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 detected: double free or corruption'). Интуитивно я думаю, что это потому, что освобождение не освобождает один узел, а обычный цикл пытается освободить его несколько раз (плюс освобождение всего блока, вероятно, портит все другие указатели на узлы, которые все еще существуют?), но:
Цель этого в том, что я вызываю malloc сотни тысяч раз, и было бы неплохо, если бы все было быстрее. Если есть лучший способ обойти это, или я не могу ожидать, что это станет быстрее, я был бы признателен услышать это тоже. :)