2012-01-28 93 views
1

我在以下代码中找不到seg错误,我希望有人能为我指出它。C分割错误

我有以下的结构,其ID是连续起价0的单链表:

typedef struct basic_block_struct 
{ 
    int id; 
    bit_vector *dominators; 
    struct basic_block_struct *next; 
} basic_block; 

后来,当列表需要查找了很多我尝试使用指针数组每个在列表中阻止以利用索引。应该有一个一一对应块的ID和数组的索引之间:

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); 

这无疑是导致赛格故障的最后一行。函数调用是合法的 - 它只是在第一个块中设置bit_vector“dominators”的第一个位(bit 0) - 但它看起来并没有指向basic_block。

任何意见表示赞赏。

问候。

+1

没有足够的上下文来回答您的问题,可能是因为您从未在您的循环中找到search_bb-> id == 0并因此dom_array [0]保持单元化的情况或者可能是'dominators'不是一个有效的地址,在任何情况下,一个好的内存调试器都会有很长的路要走,如果你碰巧在Linux上,请查看http://valgrind.org/。不后悔学习如何使用它 – FatalError 2012-01-28 05:13:25

+0

&*是不需要的,没有它会失败吗? – vines 2012-01-28 05:14:55

回答

0

啊,神秘解决了。我胜过自己。该bit_vector永远不会被分配。 :-(

1

每当遇到分段错误,在一分钟内看不到答案时,请使用valgrind。这是一个valgrind tutorial that shows what it can do。面向对象的程序员在每次更改代码时都使用单元测试。以相同的方式使用valgrind