void *malloc(size_t size);
void *calloc(size_t num, size_t size);
malloc는 할당할 메모리 크기를 바이트 단위로 전달받고, 할당된 공간의 값들은 바꾸지 않는다.
calloc는 메모리 크기를 두 값으로 나누어 전달받으며, 할당된 공간의 값을 모두 0으로 바꾼다.
그래서 배열을 할당하고 모두 0으로 초기화해야 할 때는 calloc를 쓰면 편하다.
아래 세 문장은 int형 변수를 배열처럼 5개씩 할당하는 예이다.
n = (int *)malloc( 5 * sizeof(int) );
n = (int *)calloc( 5, sizeof(int) );
n = (int *)calloc( 1, 5*sizeof(int) );
여기서 'sizeof(int)'는 int형 변수가 차지하는 메모리 크기를 바이트 단위를 반환해 준다.
메모리 공간을 할당하는 점은 위 세 문장이 모두 같고, calloc가 할당된 공간의 값들을 0으로 채운다는 점이 다르다.
둘째, 셋째 문장은 수행 결과가 똑같다.
이미 할당한 공간의 크기를 바꿀 때에는 realloc를 쓴다.
void *realloc(void *memblock, size_t size);
realloc는 재할당한 뒤에 새로 할당된 메모리 주소를 반환한다.
기존에 있던 배열의 자료는 그대로 유지하면서 배열 길이를 늘릴 수 있다.
다음은 malloc로 배열크기를 5으로 할당하여 숫자를 채우고, realloc로 배열 크기를 10로 늘려서 숫자를 추가하는 예제이다.
void main() int *ar, size, i; |
이 예제를 실행시키면 이렇게 출력된다.
01234
0123456789
출처 : http://idd.kr/blog/pbs/109
'컴퓨터 > 언어,프로그래밍' 카테고리의 다른 글
[초강추!ㅋㅋ] 구조체 리턴에 관하여 (0) | 2009.03.26 |
---|---|
malloc() 작동 원리 (0) | 2009.03.26 |
C언어 :: realloc함수 (0) | 2009.03.23 |
[C언어] 배열 - 선언,사용,다차원배열 (0) | 2009.03.23 |
[C언어] 포인터 - 선언, 사용 (0) | 2009.03.23 |