#include<stdlib.h>
 
void* malloc(size_t size) //malloc 함수의 원형.
void* calloc(size_t elt_count, size_t elt_size) //calloc 함수의 원형.
↓↓↓↓↓↓↓↓↓↓
int *arr = (int*)calloc(size, sizeof(int));
int *arr = (int*)malloc(size*sizeof(int)); //둘 다 같은 결과.
 
 free함수
#include<stdlib.h>
 
void free(void* ptr) //free 함수의 원형.
- Heap 영역은 컴퓨터가 알아서 올리고 내리고 해주지 않는다. 그래서 메모리를 할당하는 것과
더불어 할당된 메모리를 해제하는 것도 프로그래머가 직접해 주어야 한다.
free함수로 힙영역의 메모리를 해주지 않으면 쌓이고쌓여서 메모리 부족현상이 일어나게 된다.
 
#include<stdio.h>
#include<stdlib.h>
 
int main(void)
{
       int size, i;
       int *arr;
 
       fputs("Input number!! to memory allocate: ", stdout);
       scanf("%d", &size);
 
       arr = (int*)calloc(size, sizeof(int));
       //arr = (int*)malloc(size*sizeof(int)); //위의 것과 같다.
       if(arr == NULL)
       {
              puts("Meomory allocation filed\n");
              exit(1); //비 정상적 종료를 의미.
       }
 
       for(i=0; i<size; i++)
              scanf("%d", &arr[i]);
 
      for(i=0; i<size; i++)
              printf("%d ", arr[i]);
 
       free(arr);
 
       return 0;
}


Stack Area = 지역변수, 매개변수가 올라가는 메모리 지역. (정적으로 할당)
- 함수호출이 끝나면 메모리상에서 없어짐.
 
Data Area = 전역변수, static변수가 올라가는 메모리 직역. (정적으로 할당)
- 프로그램이 종료되어야 메모리상에서 사라짐.
 
Heap Area = 프로그래머 할당 메모리 지역. (동적으로 할당)
- 데이터 영역이나 스택과 달리 프로그래머에 의해 필요한 만큼 메모리를 할당하고 해제할 수 있다.
 
※ Stack, Data 영역은 컴파일-타임에서 할당될 메모리의 크기가 결정되어야 한다.
※ Heap 영역은 런-타임에서 할당될 메모리의 크기가 결정되어야 한다.
break, return, exit(0 or 1)
break문은 반복문이나 제어문등을 종료할 때 쓰인다.
return문은 함수를 종료할 때 쓰인다.
exit문은 프로그램을 완전히 종료할 때 쓰인다. exit(1)이면 오류로 인해 프로그램 완전종료를 알린다.
break < return < exit 순으로 exit가 가장 크다.
return이 만약 void function(void)에 쓰이면 해당 함수만 종료하고 main함수로 돌아간다.
exit이 만약 void function(void)에 쓰이면 main함수가 아니라 다른 함수에 있더라도 프로그램을 완전 종료해 버린다.

Posted by scii
: