2013-01-08 45 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