안녕하세요 동적메모리할당 관련 내용입니다
동적메모리를 할당한다는 것은, "스택"영역에 데이터를 저장하는것을 의미합니다
이처럼 동적할당을 한다면 프로그램 실행중에 변수를 메모리에 할당할수있게 됩니다
-동적메모리할당함수
void* malloc(size_t size);
void* -> 반환형
malloc -> 함수이름
size_t -> 자료형
size ->변수명
1
2
3
4
5
6
7
8
9
10
11
|
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char *p = (char*)malloc(10);
strcpy(p,"wowon");
printf("%s \n",p);
free(p);
}
|
cs |
스택에 p가 저장되고 힙에 wowon가 저장되고 p가 wowon을 가리키게됩니다
8번째줄에 wowon을 저장시킬때 strcpy(p,"wowon")을 했습니다.
p="wowon"을 하게된다면 "wowon"은 데이터세그먼트에 저장이 되고 p는 데이터세그먼트에 할당된 "wowon"을 가리키므로 동적할당이 아닙니다
7번째줄에 char *p = (char*)malloc(10);
(char*)을 앞에 붙인 이유는, malloc의 반환형은 void*이고, p자료형은 char*입니다. 그래서 강제형변환을 통해서 char*형으로 바꿔주기 위함입니다
-동적할당관련함수
void *malloc (size_t size)
예시) (int *)malloc(n*sizeof(int))
void *calloc(size_t nobj, sizet size)
예시) (int *)calloc(n,sizeof(int))
void *realloc(void *ptr, size_t newsize)
예시) (int *)realloc(p, sizeof(int)*n))
malloc함수와 calloc함수는 모두 메모리를 할당하는 함수인데 차이점이 있습니다. malloc은 할당한 메모리 영역을 쓰레기 값 그대로 보존하며, calloc함수는 할당한 영역을 0으로 초기화합니다
realloc은 기존 메모리 할당을 다시하는 함수입니다.
void free(void *ptr)
메모리 해제 함수
더이상 사용하지 않는 메모리 영역을 시스템이 재사용할 수 있도록 해제하는 함수입니다
'프로그래밍 언어 > C언어' 카테고리의 다른 글
포인터 활용하기 (0) | 2021.08.07 |
---|---|
C언어 문자열 검색하기 (0) | 2021.06.07 |
동적메모리할당 1편 (0) | 2021.05.04 |
C언어 가변인자란? (0) | 2020.08.05 |
C언어 a,'a',"a' 차이점(변수,문자,문자열) (0) | 2020.07.26 |