[C 언어] 동적 메모리
- 카테고리 없음
- 2020. 11. 30.
동적메모리
동적메모리 할당, 해제는 전부 개발자 몫
포인터로 동적메모리 할당시 꼭 잡아줘야 한다.
포인터로 동적메모리 해제를 해줘야 한다.
동적메모리할당함수
1. malloc() : 동적메모리가 쓰레기값으로 할당.
2. calloc() : 동적메모리의 값이 0으로 세팅해서 할당.
3. realloc() : 메모리가 재할당이 되지만, 잘 사용하지 않는다.
동적메모리 해제 함수
free()
void * malloc(size_t); // size_t == unsinged int 부호 없는 int와 같은 말이다.
//void 포인터를 잡은 이유는 개발자가 나중에 캐스팅 하라는 의미이다.
1. malloc()
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main() {
int num;
int* p;
int i;
scanf("%d", &num);
// int 타입은 4byte이므로 입력받은 값 * 4를 입력한다.
//malloc(num*4);
//int 크기는 4이므로 sizeof를 이용한다.
// malloc는 void 타입이므로 int타입으로 형변환 시켜준다.
p = (int) malloc(num * sizeof(int)); // 동적 메모리 할당.
for (i = 0; i < num; i++)
{
p[i] = i;
}
for (i = 0; i < num; i++)
{
printf("%d\n", p[i]);
}
//p가 가르키고 있는 주소를 지우라는 의미이다.
// 안 써도 error는 발생하지 않는다. 그러나 메모리가 남아 있으므로 지우는 것이 좋다.
free(p); //동적 메모리 해제
return 0;
}
malloc는 시작할때 초기값을 안 주면, 알 수 없는 값으로부터 시작한다.
그래서 반드시 초기값을 지정해줘야 한다.
2. Calloc()
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main() {
int num;
int* p;
int i;
scanf("%d", &num);
// int 타입은 4byte이므로 입력받은 값 * 4를 입력한다.
//malloc(num*4);
//int 크기는 4이므로 sizeof를 이용한다.
// malloc는 void 타입이므로 int타입으로 형변환 시켜준다.
// 동적 메모리 할당.
//p = (int)malloc(num * sizeof(int)); // malloc
p = (int*)calloc(num, sizeof(int)); // calloc
/*for (i = 0; i < num; i++)
{
p[i] = i;
}*/
for (i = 0; i < num; i++)
{
printf("%d\n", p[i]);
}
//p가 가르키고 있는 주소를 지우라는 의미이다.
// 안 써도 error는 발생하지 않는다. 그러나 메모리가 남아 있으므로 지우는 것이 좋다.
free(p); //동적 메모리 해제
return 0;
}
Calloc를 사용 할 경우 초기값은 0부터 시작한다.
반응형