logo

C의 동적 메모리 할당

개념 C 언어의 동적 메모리 할당 C 프로그래머가 런타임에 메모리를 할당할 수 있도록 합니다. . C 언어의 동적 메모리 할당은 stdlib.h 헤더 파일의 4가지 기능을 통해 가능합니다.

  1. malloc()
  2. 콜록()
  3. 재 할당()
  4. 무료()

위의 기능을 배우기에 앞서 정적 메모리 할당과 동적 메모리 할당의 차이점을 먼저 알아보겠습니다.

정적 메모리 할당동적 메모리 할당
메모리는 컴파일 타임에 할당됩니다.메모리는 런타임에 할당됩니다.
프로그램 실행 중에는 메모리를 늘릴 수 없습니다.프로그램을 실행하는 동안 메모리를 늘릴 수 있습니다.
배열에 사용됩니다.연결리스트에 사용됩니다.

이제 동적 메모리 할당에 사용되는 방법을 간략하게 살펴보겠습니다.

malloc() 요청된 메모리의 단일 블록을 할당합니다.
콜록() 요청된 메모리의 여러 블록을 할당합니다.
재 할당() malloc() 또는 calloc() 함수가 차지하는 메모리를 재할당합니다.
무료() 동적으로 할당된 메모리를 해제합니다.

C의 malloc() 함수

malloc() 함수는 요청된 메모리의 단일 블록을 할당합니다.

실행 시 메모리를 초기화하지 않으므로 초기에는 가비지 값을 갖습니다.

메모리가 충분하지 않으면 NULL을 반환합니다.

malloc() 함수의 구문은 다음과 같습니다.

중앙 CSS의 버튼
 ptr=(cast-type*)malloc(byte-size) 

malloc() 함수의 예를 살펴보겠습니다.

 #include #include int main(){ int n,i,*ptr,sum=0; printf(&apos;Enter number of elements: &apos;); scanf(&apos;%d&apos;,&amp;n); ptr=(int*)malloc(n*sizeof(int)); //memory allocated using malloc if(ptr==NULL) { printf(&apos;Sorry! unable to allocate memory&apos;); exit(0); } printf(&apos;Enter elements of array: &apos;); for(i=0;i<n;++i) { scanf('%d',ptr+i); sum+="*(ptr+i);" } printf('sum="%d&apos;,sum);" free(ptr); return 0; < pre> <p> <strong>Output</strong> </p> <pre> Enter elements of array: 3 Enter elements of array: 10 10 10 Sum=30 </pre> <h2>calloc() function in C</h2> <p>The calloc() function allocates multiple block of requested memory.</p> <p>It initially initialize all bytes to zero.</p> <p>It returns NULL if memory is not sufficient.</p> <p>The syntax of calloc() function is given below:</p> <pre> ptr=(cast-type*)calloc(number, byte-size) </pre> <p>Let&apos;s see the example of calloc() function.</p> <pre> #include #include int main(){ int n,i,*ptr,sum=0; printf(&apos;Enter number of elements: &apos;); scanf(&apos;%d&apos;,&amp;n); ptr=(int*)calloc(n,sizeof(int)); //memory allocated using calloc if(ptr==NULL) { printf(&apos;Sorry! unable to allocate memory&apos;); exit(0); } printf(&apos;Enter elements of array: &apos;); for(i=0;i<n;++i) { scanf('%d',ptr+i); sum+="*(ptr+i);" } printf('sum="%d&apos;,sum);" free(ptr); return 0; < pre> <p> <strong>Output</strong> </p> <pre> Enter elements of array: 3 Enter elements of array: 10 10 10 Sum=30 </pre> <h2>realloc() function in C</h2> <p>If memory is not sufficient for malloc() or calloc(), you can reallocate the memory by realloc() function. In short, it changes the memory size.</p> <p>Let&apos;s see the syntax of realloc() function.</p> <pre> ptr=realloc(ptr, new-size) </pre> <h2>free() function in C</h2> <p>The memory occupied by malloc() or calloc() functions must be released by calling free() function. Otherwise, it will consume memory until program exit.</p> <p>Let&apos;s see the syntax of free() function.</p> <pre> free(ptr) </pre> <hr></n;++i)></pre></n;++i)>

C의 calloc() 함수

calloc() 함수는 요청된 메모리의 여러 블록을 할당합니다.

처음에는 모든 바이트를 0으로 초기화합니다.

메모리가 충분하지 않으면 NULL을 반환합니다.

calloc() 함수의 구문은 다음과 같습니다.

 ptr=(cast-type*)calloc(number, byte-size) 

calloc() 함수의 예를 살펴보겠습니다.

 #include #include int main(){ int n,i,*ptr,sum=0; printf(&apos;Enter number of elements: &apos;); scanf(&apos;%d&apos;,&amp;n); ptr=(int*)calloc(n,sizeof(int)); //memory allocated using calloc if(ptr==NULL) { printf(&apos;Sorry! unable to allocate memory&apos;); exit(0); } printf(&apos;Enter elements of array: &apos;); for(i=0;i<n;++i) { scanf(\'%d\',ptr+i); sum+="*(ptr+i);" } printf(\'sum="%d&apos;,sum);" free(ptr); return 0; < pre> <p> <strong>Output</strong> </p> <pre> Enter elements of array: 3 Enter elements of array: 10 10 10 Sum=30 </pre> <h2>realloc() function in C</h2> <p>If memory is not sufficient for malloc() or calloc(), you can reallocate the memory by realloc() function. In short, it changes the memory size.</p> <p>Let&apos;s see the syntax of realloc() function.</p> <pre> ptr=realloc(ptr, new-size) </pre> <h2>free() function in C</h2> <p>The memory occupied by malloc() or calloc() functions must be released by calling free() function. Otherwise, it will consume memory until program exit.</p> <p>Let&apos;s see the syntax of free() function.</p> <pre> free(ptr) </pre> <hr></n;++i)>

C의 realloc() 함수

malloc()이나 calloc()을 실행하기에는 메모리가 부족할 경우 realloc() 함수를 이용해 메모리를 재할당할 수 있다. 즉, 메모리 크기를 변경합니다.

realloc() 함수의 구문을 살펴보겠습니다.

 ptr=realloc(ptr, new-size) 

C의 free() 함수

malloc()이나 calloc() 함수가 차지하는 메모리는 free() 함수를 호출하여 해제해야 합니다. 그렇지 않으면 프로그램이 종료될 때까지 메모리를 소비합니다.

free() 함수의 구문을 살펴보겠습니다.

 free(ptr)