2012-01-28 292 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