calloc() 질문입니다
390
작성한 질문수 33
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키

답변 1
0
초기화는 잘 된겁니다. 근데 문제가 있습니다!
질문자님께서 작성한 코드 보면 malloc 과 calloc 에게 n 을 파라미터로 넘겨주고 있는데
malloc 과 calloc 에게 이 사이즈만큼 할당해줘 하고 파라미터를 넘겨줄 땐 byte 단위로 넘겨줍니다.
즉, 질문자님께선 10 인 n 을 넘기셨으니 10byte 의 크기를 동적할당 받으신 것입니다.
10 개의 int 를 할당받기 위해 10 을 넘겨주신 것 같은데 이렇게 하면 안되고 sizeof(int) * 10 즉, 40 을 넘겼어야 합니다.
ptr2 는 10byte 크기의 메모리를 가리키고 있는 것이 되었구요,
게다가 calloc (1, 10) 으로 하셨는데 calloc 은 첫번째 파라미터는 갯수, 두번째 파라미터는 타입의 크기를 넘겨야 하는 함수입니다. 그렇기 때문에 int 가 10개 들어갈 수 있는 메모리를 만드려면 calloc (10, 4 ) 혹은 calloc (10, sizeof(int)) 로 호출하셨어야 합니다. 질문자님께서 작성하신 calloc (1, 10) 는 10 byte 를 1 개 할당해달라 하는거나 마찬가지입니다.
따라서 ptr2 는 10byte 크기의 메모리를 가리키고 있는건데 질문자님 코드는 for문을 10번 돌면서 포인터 산술연산을 하고 있습니다. 즉, int 가리키는 포인터이기 때문에 주소값이 4 씩 차이가 나게끔 산술연산이 될 것입니다.
그렇기 때문에 사실상 for문으로 calloc 으로부터 받은 메모리를 도는건 2번 정도밖에 안되는거에요. 10byte 로 할당받았었는데 4byte 단위로 산술연산 하니까요
10번 도는 for문이기 떄문에 주소값이 최대 40 까지 더해지는데 calloc (1, 10)로 작성하셨기에, 막상 calloc 으로 할당한 메모리는 크기가 10byte 밖에 안되기 떄문입니다. (주소 1당 메모리 크기 1byte 입니다.)
10byte 크기의 메모리는 0 으로 다 초기화가 된 상태입니다. 질문자님 출력 결과 보시면 두번째까진 0 으로 잘 나옵니다. 그 이후에 출력된 부분들은 calloc 이 할당한 메모리 영역이 아니기에 쓰레기값인 셈입니다.
Export template 안됨
1
65
2
완전히 똑같이 따라해도 exe파일이 안만들어져서 실행이 안됩니다.
1
92
3
main 함수에서 왜 int만 선언이 되는걸까요
1
81
2
8비트 2진수 변환시 왜 1을 더해야하나요?
1
77
2
혹시 강의를 빠르게 수강하려면 어디서부터 듣는게 좋을까요?
1
78
1
프로토타입과 함수간의 인자 불일치
1
87
2
12.12 헤더 관련 질문
1
74
2
Visual Studio Community 2026 사용 문의
1
171
2
Q. 15:30, 부호가 있는 8비트 정수 질문
1
73
2
getchar(), putchar()
1
111
3
강의자리ㅛ
1
93
2
비주얼스튜디오코드로 공부해도 상관없나요?
1
127
2
소스파일안에 여러 파일
1
87
2
F5와 F7의 차이
1
90
2
c = TWO * (a+b); 에서 a와 b는?
1
67
2
; 세미콜론을 붙이는 기준에 문의
1
78
1
Step over 기능 문의
1
65
2
2.6 강의 따옴표 출력 규칙 문의
1
87
2
int main 함수 관련 오류 문의
1
76
2
13.4 words[0]
0
73
2
11.7 함수를 구현해 봤습니다.
1
67
2
11.6 직접 strcmp와 strncmp를 구현해 보았습니다.
1
71
2
11.6 my_strcat과 my_strncat을 구현해봤습니다.
1
61
2
11.6 fit_str함수를 구현해 봤습니다.
1
59
2





