Поделиться через


C6308

Предупреждение C6308: "realloc" может вернуть нулевой указатель. Присвоение нулевого указателя <переменной>, которая передается в качестве аргумента для "realloc", приведет к утечки в исходном блоке памяти.

Это предупреждение указывает на утечку памяти в результате неверного использования функции перераспределения. Функции перераспределения кучи не высвобождают переданный буфер, если перераспределение не окончилось успехом. Чтобы устранить неполадку, следует присвоить результат функции перераспределения временному объекту, а затем заменить исходный указатель после успешного перераспределения.

Пример

Это предупреждение создается в следующем примере кода:

#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);
  }
}

Это предупреждение может привести к появлению шума, если у перераспределяемого буфера нет действующего псевдонима во время присвоения результата функции перераспределения.