2013-01-08 2 views
0

구조체 IMAGE_T (아래 표시된, 프랑스어 변명) 자체의 alloc 함수로 작업하고 있습니다. 구조체의 동적 할당 문제가 있습니다

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; 
} 

디버거를 통과, 그것은 버그 밖으로 진술은 : 는 "처리되지 않은 예외가로 :가 0xc0000005 : 액세스 위반이 위치를 0x00000000을 읽고." .. 나는 확실히 제대로 작동하지 않는 alloc_image와 관련이 있습니다. 어떤 제안?

(추가 정보를 들면, IMAGE_T 난 후 메모리를 할당하기 위해 자체가 그 안에 기능 alloc_image을 포함 IMAGE_T *를 반환하는 다른 함수를 사용하고있어 선언 후.이 문제가 있습니까?)

당신이 "데이터"멤버 한은 calloc을 해결하려고 노력하고 있기 때문에

감사

답변

0

난 당신이 액세스 위반을 얻고있는 이유를 의심 메모리를 할당 할 때() 널 만들었을 것입니다.

그렇다면 왜 IMAGE_T의 "데이터"멤버가 서명되지 않은 char **인지 이해하고 싶습니다. 왜 단순히 unsigned char *가 아닌가? (그리고 나서 alloc_image는 IMAGE_T에 메모리를 할당 한 다음 할당 된 구조 내에서 "데이터"를위한 공간을 할당해야합니다.)

+0

나중에 데이터로서 오류가있는 데이터를 부호없는 char ** 형식으로 2D 배열로 넣습니다. (즉, 데이터 [i] [j]). 디버깅 할 때, 'IMAGE_T * imagein = NULL;'은 'imagein = 0xcccccccc {nbl = ??? nbc = ??? 데이터 = ??? } ' – freewilly