다음 코드는 calloc을 사용하여 width 및 height imageWidth의 2 차원 배열을 할당해야합니다 (장난감 쿼드 트리 작성 프로그램의 경우 발생). 세 번째 디버그 인쇄는 루프가 진행됨에 따라 [0]에서 [10] 이미지의 배열에서 일어나는 일을 추적하는 것입니다.calloc을 반복적으로 호출하면 이전 호출의 데이터가 손상된 것으로 보입니다
/* allocate pointer array memory */
char** image = calloc (imageWidth, 1);
if (image == NULL) errMalloc();
/* fill with a series of char arrays */
for (i = 0; i < imageWidth; i++) {
image[i] = calloc (imageWidth, 1);
if (image[i] == NULL) errMalloc();
/* debug prints */
printf("%d ", i);
printf("%d ", image[i][0]);
printf("%d\n", image[i%10][0]);
}
이미지의 폭보다 작은 경우 ~ 20 (16 말), 난,
0 0 0
1 0 0
2 0 0
etc...
15 0 0
하지만 뭔가를 기대 인쇄물을 얻을 수 29 IMAGEWIDTH를 설정하면 제공 뭔가
0 0 0
1 0 0
etc...
9 0 0
10 0 16 //value at image [0][0] has changed
11 0 0
etc...
19 0 0
20 0 16
21 0 -96 // now value at image[1][0] has changed
22 0 0
etc..
27 0 0
28 0 0
같은 무엇이 이것을 일으킬 수 있습니까? 나는 calloc이 다시 호출 될 때 다른 메모리의 값을 변경한다는 것을 매우 의심한다. 그래서 에러는 내 코드에 있어야한다. 유용한 경우 두 개의 if 문은 단순히 puts() 및 exit()로 연결됩니다. 이상한 결과가 나올 때 입력되지 않습니다.
감사합니다.
'imageWidth'를 할당하기위한'calloc (imageWidth, 1)''char *'s가 잘못되었습니다; '1' 대신'sizeof (char *)'가 필요합니다. – Ryan