본문 바로가기
Develop/C

21 C 언어 메모리 동적 할당 malloc calloc realloc free 예제

by 구운밤이다 2016. 8. 24.
728x90
반응형

이번 시간엔 메모리 동적 할당에 대해서 알아보도록 하겠습니다! 바로 변수들에게 메모리를 사용자가 원하는 대로 공간을 할당해주고 그 공간을 소멸시킬 수 있는 함수입니다! 여기엔 malloc, calloc, realloc 함수가 존재하는데요 하나하나 알아보도록 하겠습니다!

malloc 함수


예를 들어 한 변수를 선언해 볼게요!


char *str = (char*)malloc(sizeof(char)*50);


이런 식으로 선언하는데요! 이 문장의 뜻은 이렇습니다! char형 포인터로 길이가 50인 문자 배열을 담을 수 있는 공간을 할당한다는 뜻이에요! 그리고 이런식으로



char* func (int n) {

    char *str = (char*)malloc(sizeof(char)*50);

    ...

    return str;

    free(str);

}


함수를 선언하면 함수가 종료된 뒤에도 메모리 공간이 소멸되지 않기 때문에 유지될 수 있겠죠? 마지막에 free(str); 이거를 통해서 메모리 공간을 소멸 시킬 수 있어요!


calloc 함수


n = (int *)calloc(50sizeof(int));


얘는 이렇게 써요 거의 비슷하게 생겼는데 인자가 두개죠? 바로 sizeof(int) 이 크기 50개를 할당해달라는 말이에요 그럼 총 200바이트를 할당받을 수 있겠죠? 그럼 저 malloc과는 다른 점이 뭘까요? 바로 malloc에서는 초기화 할때 쓰레기 값이 들어가지만 calloc에서는 0이 들어가요! 얘도 free(n);를 통해서 공간을 소멸시킬 수 있어요!


realloc 함수


마지막으로 realloc 함수! 얘도 예제를 통해 알아볼께요


char *str = (char*)malloc(sizeof(char)*5);


뭐 이런 게 있다고 치면


str = (char*)realloc(str, sizeof(char)*50);


이렇게 해서 길이가 50인 배열로 늘릴 수 있어요!!


모르는 것은 댓글이나 쪽지로 남겨주시면 성심 성의껏 답변해드리겠습니다!! 댓글공감구독(이웃추가)는 블로거에게 큰 힘이 됩니다! 부탁드리면서 이번 포스팅을 마치도록 하겠습니다! 지금까지 딘또였습니다.

728x90
반응형

댓글