C

- 동적배열 - malloc()

룸훼훼 2010. 10. 21. 12:25
반응형
배열은 C언어가 제공하는 가장 기본적인 자료 구조이며 워낙 단순하기떄문에 누구나 쉽게 익숙해질수 있다.
배열의 장점은 두가지로 나눌수 있다.
첫번째는 구조가 단순 하기때문에 정보자체를 기억하는 메모리외에 추가로 소모하는 메모리가 전혀없어서
공간효율이 좋다.

둘째로 아무리 배열크기가 커지더라도 검색속도가 일정하다는것이다.

이러한 장점에도 단점이 있는데 배열요소가 연속된 메모리공간에 배치되어 있어야 하므로 중간의요소를
삭제하거나 새로운 요소를 삽입할수 없다는 것이다.
배열은 일반적으로 삽입, 삭제가 안되는것으로 알려져 있다. 하지만 이것은 일종의 고정관념이다.
방법을 찾아보면  불편하기는 하지만 불가능 한것은 아니다.
중요한것은 미리 선언해놓은 크기이상 집어넣기가 불가능하다. 소스를 고치면되지만 불편하다.
만약 런타임중간에 공간이 모자라다는 것을 알면 고치기가 불가능하다는 이야기이다.
그래서 사용하는 것이 동적배열이다. 런타임도중 필요한만큼 크기를 늘렸다 줄였다 하는것이다.

C언어에서는 동적배열에 대한 지원이 전혀 없으므로 직접만들어 써야한다. C++로 만든 라이브러리(MFC,
STL등 )에는 동적배열 클래스가 제공된다.

malloc -
malloc함수는 인자로 지정한 크기의 메모리를 할당하는데 성공하면 메모리의 시작주소를 리턴한다.
만약 메모리 할당에 실패하면 NULL포인터를 리턴한다. 인자로 지정하는 메모리 크기는 바이트 단위이며
할당된 메모리에는 어떤 형태의 데이터도 저장할수 있다. 주의할점이 있는데 할당된메모리를 초기화
하지 않는다. 
void *malloc(size_t size); //size => 할당받을 메모리 크기

예) 문자 100개를 저장할수 있는 메모리를 할당하는 예.
char *ptr;
ptr  =  malloc(sizeof(char) * 100); 

메모리를 할당받아 사용하고 나면 해제를 시켜주는데 메모리해제함수는 free()를 쓴다.
void free(void *ptr);
//ptr => 해제할 메모리주소
free함수가 성공하면 ptr을 가리키던  메모리는 더이상 의미가 없다.
반응형

'C' 카테고리의 다른 글

- 연결리스트 -  (0) 2010.12.29
- 함수 포인터 , void형 포인터 -  (0) 2010.10.20
- #pragma -  (0) 2010.10.20
- 비트 연산자 -  (0) 2010.10.18
- goto문 -  (0) 2010.10.18