본문 바로가기
프로그래밍/C & C++

[C] 메모리 관리 함수

by 불타는홍당무 2016. 7. 8.

<stdlib.h> 헤더 필요 : #include <stdlib.h>


1. 동적 메모리 할당

[함수] void *malloc(size_t size);

[인수] 필요한 메모리 크기로 단위는 바이트 size_t size

[반환] 메모리가 할당된 포인터, 메모리 확보에 실패했다면 NULL을 반환

반환 값이 void 타입인 이유는 char 한개의 타입만 반환되는 것이 아니라 char, int, long, 또는 구초체 등과 같은 다양한 형태의 변수 포인터가 받을 수 있음 

#include <stdio.h>

#include <stdlib.h> int main() { char *ptr_char; int *ptr_int; int ndx; ptr_char = (char *)malloc( 50); ptr_int = (int *)malloc( 50 * sizeof( int)); for ( ndx= 0; ndx < 50; ndx++) { ptr_char[ndx] = 'a'; ptr_int[ndx] = 2007 +ndx; } for ( ndx= 0; ndx < 50; ndx++) { printf( "%c %d\n", ptr_char[ndx], ptr_int[ndx]); } free( ptr_char); free( ptr_int ); return 0; }


2. 요소 크기를 지정하여 동적 메모리 할당

[함수] void *calloc(size_t nelem, size_t elsize)

※ malloc( )가 바이트 단위로 메모리를 요청한다면 특정 크기에 대한 개수 만큼을 메모리로 요청

[인수] size_t nelem 필요한 요소의 개수, size_t elsize 요소의 크기

[반환] void * 할당된 메모리 포인터, NULL 메모리 할당에 실패

#include <stdio.h>

#include <stdlib.h>


int main()

{ int *ptr_int1; int *ptr_int2; int ndx; ptr_int1 = (int *)malloc( 50 *sizeof( int)); ptr_int2 = (int *)calloc( 50, sizeof( int)); for ( ndx= 0; ndx < 50; ndx++) { ptr_int1[ndx] = 2007 +ndx; ptr_int2[ndx] = 2007 +ndx; } for ( ndx= 0; ndx < 50; ndx++) { printf( "%d %d\n", ptr_int1[ndx], ptr_int2[ndx]); } free( ptr_int1); free( ptr_int2);

return 0; }


'프로그래밍 > C & C++' 카테고리의 다른 글

[C++] 기본 데이터 타입  (0) 2019.11.07
[C++] 변수의 선언과 대입의 정확한 개념  (0) 2019.10.16
[C] 날짜/시간 처리 함수  (0) 2016.07.07
[C] 문자 처리 함수  (0) 2016.07.06
[C] 포인터  (0) 2016.03.31