Dailelog
C_dynamic allocation 본문
#include #include main() { int *p; //int p[3]; //원래는 이렇게 자동할당으로 배열을 만들어 주어야 하는데 만들어주지 // 않고 동적할당으로 heap영역에 만들게 됨 int i; p = (int *) malloc(3*sizeof(int));//12byte를 할당해서 저장 장소 3개를 만드는 행위 //동적할당은 사용하는 이유는 배열에서 공간을 예상해서 선언해주는데 그 공간이 정해지지 않을때 //그리고 오버플로우를 방지하기 위해서 //int p[n]; 배열의 크기는 변수로 못함 그래서 sizeof앞에 수를 변수로 처리하면 오버플로우 없이 //저장공간을 그때그때 할당할수 있다. p[0] = 13; p[1] = 72; p[2] = 81; for(i = 0; i < 3; i++) { printf("p[%d] = %d \n",i,p[i]); } /* p = (int *)malloc(sizeof(int));//malloc(4); //(int *) 을 타입캐스팅이라고 함 기본적으로 malloc()함수는 void type를 리턴함 //heap영역의 운영체제가 사용하지 않는 무작위 장소를 4byte의 공간에 malloc()가 주소값을 가지고옴 *p = 25; printf("%d\n",*p); */ } |
동적할당 Dynamic allocation
: 프로그래머의 지시에 의해서 "생겨라" 라고 하면 기억장소가 생기고
"없어져라"라고 하면 기억장소가 없어지는 방식으로 할당되는 방식이다.
heap영역에 할당되는데 원래 heap영역의 주인은 OS이다.
malloc(int) 함수,free() 함수를 이용해서 할당과 해제를 한다. 이때 해제 해주지 않으면 우리 눈에 보이지
않기 때문에 계속 해서 남아있어 공간만 차지해서 시스템이 죽을 수 있다.
특징으로는 동적할당된 기억장소는 변수명을 지을 수가 없기 떄문에 포인터의 사용이 필수적이며
반드시 기억해야 하는것은 포인터의 사용목적 중
(3) 동적 할당
(4) 관계를 나타내는 정보처리(자료구조)
이다.
주의 사항으로는
1. garbage 포인터 위치 값을 잃어 나와 모든 프로그램이 사용못하는 기억장소가 생김
시스템의 영향을 줌 free()를 안하면 문제가 발생함
2.dangling reference 허상참조 free()를 해서 저장장소를 돌려줬는데 포인터롤 가르키면
오류가 발생한다.
3. garbage collection = garbage가 안생기도록하는 조치(free())
LIST
'언어 > C언어' 카테고리의 다른 글
structure (0) | 2022.06.25 |
---|---|
C_2차원 배열 Dynamic alloction (0) | 2022.05.07 |
C_string_strcmp (0) | 2022.04.27 |
C_string_strcpy (0) | 2022.04.27 |
C_포인터 사용 목적 (1) | 2022.04.26 |