簡體   English   中英

稍微修改我的代碼后出現細分錯誤

[英]Segmentation Fault after slightly modifying my code

我將復制相關行:

(聲明)

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來運行它。

num應該小於或等於9。(在p_opo中分配的0..8指針等於9!)

請注意,在C中,如果發生內存泄漏等情況,您會在不同的位置出現錯誤。其原因是通過更改某些代碼,可以重新排列其他代碼或數據,這可能會導致分段錯誤。

因此,問題很可能出在程序的另一部分。 確保已打開所有警告(例如gcc中的-Wall選項),它可能會給您一些提示。

如果對calloc的調用請求的內存大小為0則可能返回NULL ,如果您正在使用該內存,則可能導致分段錯誤。 因此,如果:

 0 == (n_fil * n_col / 2)

或以某種方式

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

您要求的內存大小為0,因此calloc可以返回NULL。

如果不是這種情況,那么我認為您那里沒有足夠的代碼讓任何人知道為什么它存在段錯誤。 您應該記住,在添加或更改某些代碼似乎與具有實際錯誤的代碼完全無關的代碼之前,此類錯誤可能不會被注意到。

看到您投下了calloc的回報,這使我感到懷疑。 請勿這樣做,如果忘記了系統功能的包含項,則會導致典型錯誤。

如果您在具有64位指針和32位int的計算機上,這會發生這種情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM