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);
}
}
재할당 함수의 결과를 할당할 때 재할당될 버퍼에 라이브 별칭이 있는 경우 이 경고는 소리를 발생시킬 수 있습니다.