프로그래밍 언어/C언어

동적메모리할당 2편

원원 2021. 5. 5. 12:59

안녕하세요 동적메모리할당 관련 내용입니다

동적메모리를 할당한다는 것은, "스택"영역에 데이터를 저장하는것을 의미합니다

이처럼 동적할당을 한다면 프로그램 실행중에 변수를 메모리에 할당할수있게 됩니다

 

-동적메모리할당함수

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 *= (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 *= (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