Я не могу найти ошибку сегмента в следующем коде, и я надеюсь, что кто-то может указать мне на это.
У меня есть односвязный список следующих структур, чьи идентификаторы являются последовательными, начиная с 0:
typedef struct basic_block_struct
{
int id;
bit_vector *dominators;
struct basic_block_struct *next;
} basic_block;
Позже, когда нужно много искать в списке, я пытаюсь использовать массив указателей на каждый блок в списке, чтобы воспользоваться преимуществами индексации. Между идентификаторами блоков и индексами массива должно быть однозначное соответствие:
basic_block **dom_array = (basic_block **)malloc(num_bb * sizeof(basic_block *));
basic_block *search_bb;
search_bb = head; //The head of the list of blocks
while (search_bb != NULL)
{
dom_array[search_bb->id] = &*search_bb; //Not sure the &* is needed
search_bb = search_bb->next;
}
set_bit(dom_array[0]->dominators, 0, TRUE);
Это определенно последняя строка, которая вызывает ошибку сегмента. Вызов функции является допустимым - он просто устанавливает первый бит (бит 0) "доминаторов" bit_vector в первом блоке - но, похоже, он не указывает на basic_block.
Любой совет приветствуется.
Привет.