-
c++ malloc() 함수 설명알고리즘/정리 및 오류 해결 방법 2018. 12. 9. 16:38반응형
malloc 은 memory allocation 의 약자로 메모리를 사용하기위해 바이트 단위로 메모리 공간을 확보하고 예약된 공간에 대한 포인터를 리턴한다.
보통 sizeof 연산자를 사용하며 아래와 같이 int(4바이트) 크기만큼 메모리를 할당하는 등
개발자가 원할 떄 원하는만큼 동적으로 메모리를 할당 할 수 있다.
> malloc(sizeof(int));
이 때 size가 0으로 지정되거나 메모리 할당에 실패하면 리턴 값은 NULL 이다.
정상적으로는 메모리의 주소 즉, 첫번째 바이트의 주소를 리턴한다.
ex)
> std::cout << malloc(sizeof(int));
> 0x1004563f0
근데 malloc 을 할당할 때 어떠한 데이터 형을 저장하는지를 컴퓨터는 모르기 때문에 앞쪽에
(int*) 와 같은 걸 추가해 변환해야한다.
> int* arr = (int*)malloc(sizeof(int));
그리고 선언한 뒤 중요한게 메모리를 할당했으므로 마지막에 메모리 해제해 줘야한다는 점이다.
아래와 같이 free 함수를 이용해 메모리를 해제 시켜준다.
> int* arr = (int*)malloc(sizeof(int));
> free(arr)메모리 해제 안하면 메모리 사용량이 계속 증가하는 메모리 누수가 일어난다.
또한 arr = NULL 을 통해 바라보것을 NULL 로 바꾸어 주어 다시 호출되는 문제를 막아준다.
이 문제는 구글에서 댕글링 포인터 문제라고 치면 잘나온다.
> int* arr = (int*)malloc(sizeof(int));> free(arr)> arr =NULL반응형'알고리즘 > 정리 및 오류 해결 방법' 카테고리의 다른 글
Cannot initialize a variable of type 'int' with an rvalue of type 'void *' 에러 해결법 (0) 2018.12.09 댕글링 포인터 문제: free 함수를 이용해도 계속 호출 되는 문제 (0) 2018.12.09 std::cout string int 같이 쓰는 법 (0) 2018.11.25 c++ 에서 using namespace 를 장려하지 않는 이유 (0) 2018.11.25 c++ 오류 해결법 : Use of undeclared identifier '함수명' (0) 2018.11.20