2010-11-22 29 views
1

我會複製相關線路:分割故障後小幅修改我的代碼

(聲明)

typedef struct { /* per una entrada de la taula de posicion */ 
    int f; 
    int c; 
} pos; 
pos *p_opo[9]; 

(主)現在

for (i = 0; i < num; i++) { 
     p_opo[i] = (pos *) calloc(n_fil * n_col/2, sizeof (pos)); 
    } 

,僅被介紹此之後行中,代碼在任意點中斷開(在對給定庫函數的調用中)。我懷疑我正在用這個東西腐蝕一些東西,儘管我不知道是什麼。

所有我想要的是具有可變大小的數組的數組!

PD:num是程序的參數。無論如何,我一直在用num = 1來運行它。

+0

什麼是`num`? – EboMike 2010-11-22 20:36:34

+0

編輯帖子。 num是程序的一個參數。我正在用num = 1執行此操作並獲取錯誤。 – bluehallu 2010-11-22 20:37:52

+0

如果num <= 9,我沒有看到您寫下的內容有任何問題。 「代碼在任意點中斷」是什麼意思? – steabert 2010-11-22 20:44:16

回答

2

NUM應小於或等於9(0..8在p_opo分配的指針等於9!)

注意,在C,你得到的內存泄漏等的情況下,在不同的地方錯誤原因是通過更改一些代碼,其他代碼或數據可以重新排列,這可能最終導致分段錯誤。

所以問題很可能是在你的程序的其他部分。確保你已經打開了所有警告(比如gcc中的-Wall選項),它可能會給你一些線索。

1

如果您致電calloc要求內存大小爲0,它可能會返回NULL,並且如果您使用該內存,則可能導致分段錯誤。所以,如果:

0 == (n_fil * n_col/2) 

或以某種方式

0 == sizeof (pos)   /* I don't think that this is possible */ 

你要求爲內存的大小爲0,所以釋放calloc可以返回NULL。

如果不是這種情況,那麼我不認爲你有足夠的代碼,在那裏任何人知道爲什麼它是段錯誤。你應該記住,像這樣的錯誤可能會被忽視,直到你添加或者改變一些看起來與具有實際錯誤的代碼完全無關的代碼。

0

看到你鑄造calloc迴歸讓我懷疑。不要這樣做,如果您忘記系統功能的包含,則會導致典型錯誤。

此happes如果你是一個機器在具有64個指針和32位int