Thursday, February 15, 2007
C언어] malloc() 함수로 메모리 할당 받기. 사용 방법
메모리를 할당받기 위해서는
malloc(size_t size)
의 형식으로 malloc 함수를 사용합니다. size 는 할당받을 메모리 크기를 바이트 단위로 지정합니다.
메모리가 부족하다든지 하여 에러가 나면 NULL 을 반환합니다.
성공하면 void pointer 를 반환하기에, 가령 버퍼가 char형일 경우,
(char *)
이런 식으로 타입 캐스팅을 해줍니다.
메모리 사용이 끝났으면 반드시 free() 함수로 메모리를 반환해 주어야 합니다. 다음 예제와 같습니다:
소스 파일명: example.cpp
※ 아래 박스 클릭 후, 키보드 화살표 키로 좌우 스크롤 가능함
만약 char형이 아닌 int형이라면
int *buf;
if ((buf = (int *) malloc(MSIZE * sizeof(int))) == NULL) {
이런 식으로 소스를 고쳐야 합니다. 32비트 컴퓨터에서는 int가 4바이트인데, 이 경우 sizeof(int) 로 4가 구해집니다. 이러면 MSIZE 개수의 int를 저장할 수 있습니다.
위의 예제 컴파일 및 실행 결과 화면:
(주의! 출력 결과를 그냥 화면으로 출력하게 했지만
> out.bin
이렇게 out.bin 이라는 파일로 재지향하는 것이 좋습니다. out.bin 이라는 1,048,576 바이트 파일을 헥사 에디터로 보면 01 01 01 이라는 헥사 값으로 가득 차 있을 것입니다.)
만약 재지향을 하지 않았다면, Ctrl+C키를 누르면 화면 출력이 중지됩니다.
실용적인 예제 (파일 복사): ▶▶ C언어] 파일 복사 함수, 화일 카피 소스; File Copy Function Source Code
▶▶ C언어] malloc 함수, strcpy 함수로, 문자열 복사, 저장, 출력 방법; String Copy
malloc(size_t size)
의 형식으로 malloc 함수를 사용합니다. size 는 할당받을 메모리 크기를 바이트 단위로 지정합니다.
메모리가 부족하다든지 하여 에러가 나면 NULL 을 반환합니다.
성공하면 void pointer 를 반환하기에, 가령 버퍼가 char형일 경우,
(char *)
이런 식으로 타입 캐스팅을 해줍니다.
메모리 사용이 끝났으면 반드시 free() 함수로 메모리를 반환해 주어야 합니다. 다음 예제와 같습니다:
malloc 함수 사용 예제
소스 파일명: example.cpp
※ 아래 박스 클릭 후, 키보드 화살표 키로 좌우 스크롤 가능함
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h> // 만약 stdlib.h 에 malloc 이 없다면, malloc.h 를 추가함
#define MSIZE 1048576 // 메모리 할당 크기를 1메가로 지정
int main(void) {
char *buf;
if ((buf = (char *) malloc(MSIZE)) == NULL) {
fprintf(stderr, "메모리가 부족합니다.\n");
exit(1);
}
// 버퍼를 16진수 01 로 채우기
for (int i = 0; i < MSIZE; i++)
buf[i] = 0x01;
// char 버퍼를 화면에 출력
printf("%s", buf);
free(buf); // 메모리 할당 해제
return 0;
}
#include <stdlib.h>
#include <malloc.h> // 만약 stdlib.h 에 malloc 이 없다면, malloc.h 를 추가함
#define MSIZE 1048576 // 메모리 할당 크기를 1메가로 지정
int main(void) {
char *buf;
if ((buf = (char *) malloc(MSIZE)) == NULL) {
fprintf(stderr, "메모리가 부족합니다.\n");
exit(1);
}
// 버퍼를 16진수 01 로 채우기
for (int i = 0; i < MSIZE; i++)
buf[i] = 0x01;
// char 버퍼를 화면에 출력
printf("%s", buf);
free(buf); // 메모리 할당 해제
return 0;
}
만약 char형이 아닌 int형이라면
int *buf;
if ((buf = (int *) malloc(MSIZE * sizeof(int))) == NULL) {
이런 식으로 소스를 고쳐야 합니다. 32비트 컴퓨터에서는 int가 4바이트인데, 이 경우 sizeof(int) 로 4가 구해집니다. 이러면 MSIZE 개수의 int를 저장할 수 있습니다.
위의 예제 컴파일 및 실행 결과 화면:
(주의! 출력 결과를 그냥 화면으로 출력하게 했지만
> out.bin
이렇게 out.bin 이라는 파일로 재지향하는 것이 좋습니다. out.bin 이라는 1,048,576 바이트 파일을 헥사 에디터로 보면 01 01 01 이라는 헥사 값으로 가득 차 있을 것입니다.)
D:\Z>cl /nologo example.cpp && example.exe > out.bin
example.cpp
D:\Z>
example.cpp
D:\Z>
만약 재지향을 하지 않았다면, Ctrl+C키를 누르면 화면 출력이 중지됩니다.
실용적인 예제 (파일 복사): ▶▶ C언어] 파일 복사 함수, 화일 카피 소스; File Copy Function Source Code
▶▶ C언어] malloc 함수, strcpy 함수로, 문자열 복사, 저장, 출력 방법; String Copy
tag: cpp
C언어 | C/C++ (Visual C++)
<< Home