동적으로 할당 된 배열을 캡슐화하는 구조체를 만들고 싶습니다. 나는 이러한 IntArray 구조체 생성하는 기능이, 그리고0을 할당하지 않은 Calloc()
typedef struct IntArray {
int *field;
size_t length;
} IntArray;
을 : 그것은 다음과 같습니다 (
int main() {
size_t size = 10;
IntArray *test = createIntArray(size);
for (int i = 0; i < size; i++) {
printf("%d\n", test[i]);
}
}
이
난은 calloc을 기대 : 여기
IntArray *createIntArray(size_t length) {
IntArray *output;
if ((output = malloc(sizeof(IntArray))) == NULL) {
return NULL;
}
output->field = calloc(length, sizeof(int));
output->length = length;
return output;
}
을 메인입니다)을 사용하여 0으로 메모리를 초기화하지만 출력이 이상합니다.
나는이 숫자는 메모리 주소입니다 생각하지만, 그들은 어디에서 오는? 프로그램을 시작할 때마다 숫자는 변경되지만 1. 및 6. 위치에 머물러 있습니다.
왜 이런 일이 발생합니까?
편집이 :
내가 실수은 calloc 여기에 유래에서의 malloc을 혼합, 문제는 실제로
1)'출력 =은 calloc (길이는 sizeof (INT))': 당신이 할당
int
배열을 인쇄하려면 는 다음을 사용할 수 있습니다 printf ("% d \ n", test-> field [i]);'printf ("% d \ n", test [i] – BLUEPIXY패턴을 사용할 경우이 버그는 발생하지 않았을 것입니다 ...'output = calloc (length, sizeof * output(); % d \ n ")' –
3)'test [i]'의 타입은'int'가 아니라'IntArray'입니다. – BLUEPIXY