동적 메모리
: 동적 메모리 할당, 해제는 전부 개발자의 몫 (하지 않을 경우 메모리 낭비 및 좀비 프로세스 발생)
: 포인터로 동적 메모리 할당 시 꼭 잡아줘야 한다.
: 포인터로 동적 메모리 해제를 해줘야 한다.
동적 메모리 할당 함수
1. malloc( ) : 동적 메모리가 쓰레기 값(내가 알지 못하는 값)으로 할당
2. calloc( ) : 동적 메모리의 값이 0(내가 알고 있는 값)으로 세팅해서 할당
3. realloc( ) : malloc가 똑같은데 재할당이 가능. 가장 안씀
(더 큰 메모리를 할당할 때 주소값이 바뀔수 있고, 기존 메모리는 좀비가 됨)
동적 메모리 해제 함수
: free( )
malloc()
void * malloc(size_t); // size_t == unsinged int
// void * --> 나중에 캐스팅해서 바꿔서 쓰라는 의미
#include<stdio.h>
#include<stdlib.h> // malloc은 stdlib.h안에 있음.
#include<string.h>
int main()
{
int num;
int* p;
int i;
scanf("%d", &num);
//malloc(num * 4); // int 4byte 인지 char 4개인지 모름
p = (int*)malloc(num * sizeof(int)); // 동적 메모리 할당. void*를 int*로 캐스팅
/*for (i = 0; i < num; i++)
{
p[i] = i;
}*/
// 값을 입력하지 않으면 쓰레기 값이 들어가 있음.
for (i = 0; i < num; i++)
{
printf("%d\n", p[i]);
}
free(p); // 동적 메모리 해제. 메모리 해제를 하지 않으면 메모리 낭비가 발생함
}
calloc()
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
int num;
int* p;
int i;
scanf("%d", &num);
p = (int*)calloc(num , sizeof(int)); // 동적 메모리 할당. void*를 int*로 캐스팅
/*for (i = 0; i < num; i++)
{
p[i] = i;
}*/
// 값을 입력하지 않으면 0이 들어가 있음.
for (i = 0; i < num; i++)
{
printf("%d\n", p[i]);
}
free(p); // 동적 메모리 해제. 메모리 해제를 하지 않으면 메모리 낭비가 발생함
}
연습
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void memalloc2(int** pp, int num);
int* memalloc(int num);
void input(int num, int* p);
void disp(int num, int* p);
int main()
{
int num;
int* p;
scanf("%d", &num);
memalloc2(&p, num);
//p = memalloc(num);
input(num, p);
disp(num, p);
}
// 메모리 할당 2
void memalloc2(int **pp, int num)
{
// p의 주소값을 넘겨 포인트포인터에 주소를 담아 할당
*pp = (int*)calloc(num, sizeof(int));
}
// 메모리 할당 함수
int* memalloc(int num)
{
// 해당 값을 p에 return
return (int*)calloc(num, sizeof(int));
}
// 입력 함수
void input(int num, int* p)
{
for (int i = 0; i < num; i++)
{
printf("%d : ", i);
scanf("%d", p + i);
}
}
// 출력 함수
void disp(int num, int* p)
{
for (int i = 0; i < num; i++)
{
printf("%d : %d\n", i, *(p+i));
}
}
반응형
'C언어 > C' 카테고리의 다른 글
C언어 공부 정리5(구조체) (0) | 2020.11.27 |
---|---|
C언어 공부 정리4(다차원 포인터) (0) | 2020.11.26 |
C언어 공부정리3(포인터) (0) | 2020.11.25 |
C언어 공부정리2(배열의 주소값) (0) | 2020.11.24 |
C언어 공부 정리1 (0) | 2020.11.23 |