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++.