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


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

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

Чтобы избежать все такие проблемы, используйте механизмы, предоставляемые библиотекой стандартных шаблонов (STL) C++.Они включают shared_ptr, unique_ptr и vector.Дополнительные сведения см. в разделах Интеллектуальные указатели (современный C++) и Справочник по стандартной библиотеке C++.

См. также

Ссылки

C6014