[C에서의 동적 메모리 할당]
: 효율적인 메모리 사용이 가능하다.
[calloc()과 malloc()]
: 메모리 할당 함수이다.
-두 함수 모두 할당된 메모리 (시작)주소를 리턴한다.
-배열, 구조체, 공용체를 위한 공간을 동적으로 생성한다.
-사용 후 free()를 사용하여 메모리를 해제한다.
cf) 함수에서의 변수는 해당 함수 호출이 끝난 뒤에 자동으로 메모리가 해제된다.
#include <stdlib.h>
void * calloc(size_t N, size_t, el_size); //0으로 자동 초기화 된다.
void * malloc(size_t N_bytes); //초기와가 진행되지 않는다. 쓰레기 값(garbage value)포함
[예시코드]
#include <stdlib.h>
int *grade , N;
scanf("%d", &N);
grade = (int*)calloc(N,sizeof(int)); //동적 메모리 할당 함수는 return형이 void형인데, grade는 int 포인터 형이므로 형 변환이 필요하다.
//또는 grade = (int *)malloc(N *sizeof(int));
for(i=0; i<N; i++)
scanf("%d", &grade[i]);
free(grade); //메모리 할당 해제
grade = NULL: //이후에 grade에 저장된 주소로 다시 접근하지 못하게 NULL값을 저장
[예시코드 2]
int(*p)[N], *q; // p는 배열을 포인트하기 위한 배열 포인터이다.
p = (int(*)[N])calloc(N*N, sizeof(int)); //배열 포인터로 형 변환 //1차원 배열 단위로 이동
q = (int*)p; //정수 변수 하나 단위로 이동
for(i=0; i<N*N; i++)
q[i] = i;
for(i=0; i<N; i++) {
for(j=0; j<N; j++)
printf("%3d", p[i][j]);
putchar('\n');
}
free(p); //p가 가리키고 있던 2차원 배열의 메모리 할당을 해제한다.
p=NULL; //이후에 해당 배열에
q=NULL; //접근하지 않도록 NULL값을 저장한다.
'c언어' 카테고리의 다른 글
[C언어] 비트 수준 접근 (0) | 2022.10.23 |
---|---|
[C언어] 공용체(union) / 열거형 (0) | 2022.10.12 |
[C언어] 포인터와 배열 (0) | 2022.09.07 |
[C언어]포인터와 함수 (0) | 2022.09.07 |
[C언어] 포인터 기본 (0) | 2022.09.06 |