사용해야하는 정확한 메모리 크기를 모르는 경우 동적 할당 ( malloc
) 이 필요합니다 . 예를 들어 사용자가 애플리케이션에서 파일을 여는 경우가 있습니다. 파일의 내용을 메모리로 읽어야하지만 물론 사용자가 런타임에 그 자리에서 파일을 선택하기 때문에 파일의 크기를 미리 알 수 없습니다. 따라서 기본적으로 malloc
작업중인 데이터의 크기를 미리 모를 때 필요 합니다. 적어도 이것이 .NET을 사용하는 주요 이유 중 하나입니다 malloc
. 컴파일 타임에 이미 크기를 알고있는 (수정하고 싶지 않은 경우) 간단한 문자열이있는 예제에서는 동적으로 할당하는 것이별로 의미가 없습니다.
주제에서 약간 벗어 났지만 ... .NET Framework를 사용할 때 메모리 누수가 발생하지 않도록 매우주의해야합니다 malloc
. 이 코드를 고려하십시오.
int do_something() {
uint8_t* someMemory = (uint8_t*)malloc(1024);
// Do some stuff
if ( /* some error occured */ ) return -1;
// Do some other stuff
free(someMemory);
return result;
}
이 코드에 무엇이 잘못되었는지 보십니까? malloc
와 사이에 조건부 반환 문이 free
있습니다. 처음에는 괜찮아 보이지만 생각해보십시오. 오류가 있으면 할당 한 메모리를 해제하지 않고 돌아갑니다. 이것은 메모리 누수의 일반적인 원인입니다.
물론 이것은 매우 간단한 예이며 여기서 실수를 쉽게 알 수 있지만 포인터, malloc
s, free
s 및 모든 종류의 오류 처리로 가득 찬 수백 줄의 코드를 상상해보십시오 . 상황이 정말 빨리 지저분해질 수 있습니다. 이것이 내가 적용 가능한 경우 C보다 현대적인 C ++를 선호하는 이유 중 하나이지만, 그것은 완전히 다른 주제입니다.
따라서를 사용할 때마다 malloc
항상 메모리가 free
가능한 한 d 일 가능성이 있는지 확인하십시오 .
malloc()
!