모두의 코드
C 언어 레퍼런스 - malloc 함수

이 글은 22483 번 읽혔습니다.

아직 C++ 에 친숙하지 않다면 씹어먹는 C++ 은 어때요?

malloc

stdlib.h 에 정의됨

void* malloc(size_t size);

메모리를 할당한다.

인자로 전달된 크기 만큼의 메모리를 할당 한 후에, 그 메모리의 시작 주소값을 리턴한다.

할당된 메모리는 초기화 되지 않았을 수 도 있다. 즉, 기존에 있었던 내용이 남아 있을 수 도 있다.

만일 size 가 0 이라면, malloc 이 무엇을 리턴할지는 구현한 라이브러리 마다 다르다. 어떤 경우 널 포인터를 리턴할 수 도 있고, 어떤 경우, 널이 아닌 포인터를 리턴하지만, 사용 불가능한 부분을 가리키고 있을 수 도 있다. 어떤 경우든, 해당 주소값을 사용하면 안된다.

참고로 할당한 메모리는 반드시 free 로 해제 해줘야 한다.

인자들

  • size : 메모리 블록의 크기 (바이트 단위). 참고로 size_t 는 음이 아닌 정수 타입이다.

리턴값

메모리 할당에 성공하였을 경우, 할당한 메모리 블록을 가리키는 포인터를 리턴한다. 해당 포인터의 타입은 언제나 void* 이기에, 사용자가 사용을 원하는 타입으로 캐스팅 해줘야만 한다.

만일, malloc 함수가 메모리 할당에 실패하였을 경우, 널 포인터를 리턴한다.

실행 예제

/*

  원하는 길이의 랜덤 문자열을 생성한다.
  (임의의 길이의 문자열을 담는 메모리 공간을 위해 malloc 사용)

  http://www.cplusplus.com/reference/cstdlib/malloc/
  에서 가져왔습니다.

*/
#include <stdio.h>  /* printf, scanf, NULL */
#include <stdlib.h> /* malloc, free*/

int main() {
  int i, n;
  char* buffer;

  printf("How long do you want the string? ");
  scanf("%d", &i);

  buffer = (char*)malloc(i + 1);
  if (buffer == NULL) exit(1);

  for (n = 0; n < i; n++) buffer[n] = rand() % 26 + 'a';
  buffer[i] = '\0';

  printf("Random string: %s\n", buffer);
  free(buffer);

  return 0;
}

실행 결과

실행 결과

How long do you want the string? 10
Random string: nwlrbbmqbh

참고 자료

  • free : 메모리를 해제한다.

  • calloc : 0 으로 초기화된 메모리를 할당한다.

  • realloc : 메모리를 재할당 한다.

댓글이 4 개 있습니다!
프로필 사진 없음
강좌에 관련 없이 궁금한 내용은 여기를 사용해주세요

    댓글을 불러오는 중입니다..