2013-01-08 82 views
0

我正在使用它自己的alloc函數的結構IMAGE_T(如下所示,請原諒法語)。結構的動態分配問題

typedef struct { 
    int nbl;  /* nombre de ligne de l'image */ 
    int nbc;  /* nombre de colonnes de l’image */ 
    unsigned char **data; /* tableau bidim des pixels de l’image */ 
} IMAGE_T; 



IMAGE_T *alloc_image(int nbl, int nbc){ 
    int taille = nbl*nbc+100; 
    IMAGE_T * image; 
    image = (IMAGE_T *) calloc(taille, sizeof(unsigned char)); 
    return image; 
} 

當通過調試去,這蟲子指出: 「未處理的異常在:0000005:訪問衝突讀取位置00000000。」 ..我很確定與alloc_image無法正常工作有關。有什麼建議麼?

(併爲進一步的信息,聲明一個IMAGE_T我然後使用返回IMAGE_T *,這本身就包含在其中的功能alloc_image另一個函數,以便分配內存之後。這有什麼錯呢?)

感謝

回答

0

我懷疑你要訪問衝突的原因是因爲你試圖用「數據」成員的工作,其釋放calloc()分配內存時會作出無效。

這就是說,我想了解爲什麼IMAGE_T中的「數據」成員是一個無符號字符**?爲什麼不簡單地使用unsigned char *? (然後,alloc_image必須將內存分配給IMAGE_T,然後在分配的結構中爲「數據」分配空間。)

+0

它是無符號字符**,因爲數據稍後會將錯誤數據放入它作爲二維數組(即數據[i] [j])。當我調試它時,'IMAGE_T * imagein = NULL;'出現'imagein = 0xcccccccc {nbl = ??? NBC = ???數據= ??? }」 – freewilly