Share via


C6308

경고 C6308: 'realloc'는 null 포인터를 반환할 수 있습니다. 'realloc'에 인수로 전달되는 <variable>에 null 포인터를 할당하면 원래 메모리 블록에서 누수가 발생할 수 있습니다.

이 경고는 재할당 함수를 잘못 사용하여 메모리 누수가 발생했음을 나타냅니다. 재할당이 실패할 경우 힙 재할당 함수는 전달된 버퍼를 해제하지 않습니다. 이 오류를 해결하려면 재할당 함수의 결과를 임시 포인터에 할당한 다음 재할당에 성공한 후 이를 원래 포인터와 바꿉니다.

예제

다음 샘플 코드에서는 이 경고를 발생시킵니다.

#include <malloc.h>
#include <windows.h>

void f( )
{
  char *x;
  x = (char *) malloc(10);
  if (x != NULL)
  {
    x = (char *) realloc(x, 512);
    // code...
    free(x);
  }   
}

이 경고를 해결하려면 다음 코드를 사용합니다.

#include <malloc.h>
#include <windows.h>

void f()
{
  char *x, *tmp;

  x = (char *) malloc(10);

  if (x != NULL)
  {
    tmp = (char *) realloc(x,512);
    if (tmp != NULL) 
    {
      x = tmp;
    }
    free(x);
  }
}

재할당 함수의 결과를 할당할 때 재할당될 버퍼에 라이브 별칭이 있는 경우 이 경고는 소리를 발생시킬 수 있습니다.