Linked List(z, 1추가하기)
ch25.메모리 관리와 메모리의 동적 할당
malloc 함수의 반환형이 void형 포인터인 이유와 힙 영역으로의 접근
원하는 공간 크기만큼 메모리 공간을 할당하고 그 메모리의 주소 값을 반환하겠으니 포인터 형의 변환을 통해서 직접 결정.
free 함수를 호출하지 않으면 프로그램 종료 후에도 메모리가 남게 되는가?
그러한 일은 결코 일어나지 않는다. 프로그램이 종료 되면 운영체제에 의해서 전부 해제가 되기 때문.
하지만 종료 직전에 꼭 free함수를 이용해 해제 해줄 것!!
문자열을 반환하는 함수를 정의하는 문제의 해결
함수가 호출될 때마다 문자열 저장을 위한 메모리 공간의 할당이 가능해야 하고, 이 메모리 공간은 함수를 빠져나가도 소멸되지 않고 존재해야 한다.
malloc 함수의 사촌 뻘 되는 calloc 함수
void * calloc(size_t elt_count, size_t elt_size); ->성공 시 할당된 메모리의 주소 값, 실패 시 NULL 반환
calloc함수는 두 개의 숫자를 인자로바이트를 힙 영역에 전달받는다. 총 120바이트를 힙 영역에 할당해달라. 첫 번째 전달인자로는 할당할 블록의 갯수 정보가 전달되고, 두 번째 전다린자로는 블록 하나당 바이트 크기의 정보가 전달된다. 4바이트 크기의 블록(elt_size) 30개를(elt_count) 힙 영역에 할당해달라. malloc함수는 메모리 공간을 별도의 값으로 초기화 하지 않아서 쓰레기 값이 남게 된다. calloc은 메모리 공간을 0으로 초기화시킨다.
힙에 할당된 메모리 공간 확장 시 호출하는 realloc함수
한번 할당된 공간은 크기를 확장 할 수 없다. 하지만 realloc함수를 사용한다면 가능하다.
void *realloc(void *ptr, size_t size); -> 성공 시 새로 할당된 메모리의 주소 값, 실패 시 NULL 반환
ptr이 가리키는 메모리의 크기를 size 크기로 조절해달라.
int * arr = (int *)malloc(sizeof(int)*3);
->길이가 3인 int 형 배열 할당.
arr = (int *)realloc(arr, sizeof(int)*5);
->길이가 5인 int형 배열로 확장.
'c언어' 카테고리의 다른 글
20140421 - Linked List 새롭게 변신, insert 중간삽입 (0) | 2014.04.21 |
---|---|
20140418 - 연결리스트 뒷 추가삽입, 앞 추가삽입 (0) | 2014.04.19 |
20140416 - LinkedList, 분할 컴파일(~.h, ~.c), 매개변수의 결합과 문자열화 (0) | 2014.04.16 |
20140415 - Linked List (0) | 2014.04.15 |
20140414 - 연결리스트, 메모리 구조, 동적 할당 (0) | 2014.04.14 |