mwultong Blog ... 프로그래밍 / 계산기

컴퓨터 엑셀 워드 포토샵 구글어스 WINDOWS JAVASCRIPT JAVA C++

 
Thursday, February 15, 2007

C언어] malloc() 함수로 메모리 할당 받기. 사용 방법


메모리를 할당받기 위해서는
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;
}


만약 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>

만약 재지향을 하지 않았다면, Ctrl+C키를 누르면 화면 출력이 중지됩니다.



실용적인 예제 (파일 복사): ▶▶ C언어] 파일 복사 함수, 화일 카피 소스; File Copy Function Source Code


▶▶ C언어] malloc 함수, strcpy 함수로, 문자열 복사, 저장, 출력 방법; String Copy




tag: cpp
C언어 | C/C++ (Visual C++)

0 Comments:

<< Home RSS 2.0 feed

구글 Google 에서 제공하는 무료 블로그 서비스인 블로거 Blogger 의 인터넷 주소는 www.blogger.com 입니다. Blogger 에 블로그를 만들면, blogspot.com 이라는 주소에 블로그가 생성됩니다.
블로그를 직접 방문하지 않고도 최신 게시물을 구독하려면 RSS 2.0 feed 주소를 리더기에 등록하시면 됩니다.
Previous Posts
Monthly Archives
Top