realloc쓸때 주의점


1.realooc()?
realloc() 함수는 malloc() 함수로 메모리를 할당한것은 재할당 할때 쓰인다.
메모리 공간을 그대로 두고 메모리 크기를 늘리고 줄일수 있다는것이 장점!!! 
즉, 배열을 이동하지 않고 배열 크기를 변경한다.


2.realloc을 호출했을 때 메모리에 새로운 크기의 배열을 담을만한 공간이 없다면 어떻게 될까?
=>
0을 반환함! 그리고,메모리 누수가 일어남.
이유: realloc이 새 배열을 담을만한 크기의 메모리를 할당하지 못하면 realloc은 0을 돌려주며, 할당받은 포인터는 NULL이 된다. 포인터가 가리키고 있던 배열은 여전히 힙메모리에 남아 있지만, 배열의 주소값을 읽게되므로 메모리 누수가 일어나는 것임 

 
3.주의할점 

아직 삭제하지 않은 배열을 가리키는 포인터를 덮어쓰기 전에 반드시 그 배열의 주소를 다른 어딘가에 보존해주어라! 그렇지 않으면 메모리 누수를 피할 수 없다.

ex)
int* array = 0;
int* temp;
array = ( int* ) malloc ( sizeof(int) * 4 );
temp = array;
array = ( int* ) ralloc ( array, sizeof(int) * 4 );

if(array == 0)
{
   array = temp;
   //여기에 오류 처리 코드!!!!!!!!!!!!!!!!!!


 


4.게임프로그래머라면 메모리 할당 성공 여부를 꼭 점검해라!!
 
게이머 입장에선 게임하다가 메모리누수로 인해 프로그램이 터져 꺼지면 진짜 그것보다 짜증나는 일이 있을까?  
 하하하하하핳하하하하하핳하하하하하핳하하하하하핳 

이 글을 공유하기

댓글

Designed by JB FACTORY