Предупреждение C6308
"realloc" может возвращать указатель null: назначение указателя NULL параметру name, который передается в качестве аргумента в "realloc", приведет к утечке исходного блока памяти.
Замечания
Функции перемещений кучи не освобождают переданный буфер при неудачном размещении, что может привести к утечке памяти, если она не обработана должным образом. Чтобы исправить проблему, назначьте результат функции перемещению временной переменной, а затем замените исходный указатель после успешного перемещения.
Имя анализа кода: REALLOCLEAK
Пример
В следующем примере кода создается предупреждение C6308. Эта проблема связана с назначением возвращаемого значения из realloc
x
. Если realloc
завершается сбоем и возвращается пустой указатель, исходная память, на которую указывает x
, не будет освобождена:
#include <malloc.h>
#include <windows.h>
void f( )
{
char *x = (char *) malloc(10);
if (x != NULL)
{
x = (char *) realloc(x, 512);
// code...
free(x);
}
}
Чтобы устранить проблему, можно создать временную переменную для хранения возвращаемого realloc
значения. Это изменение позволяет безопасно освободить ранее выделенную память в случае realloc
сбоя:
#include <malloc.h>
#include <windows.h>
void f()
{
char *x = (char *) malloc(10);
if (x != NULL)
{
char *tmp = (char *) realloc(x,512);
if (tmp != NULL)
{
x = tmp;
}
// code...
free(x);
}
}
Это предупреждение может привести к возникновению шума, если в момент назначения результата функции перемещении буфера в режим реального времени существует динамический псевдоним.
Чтобы избежать таких проблем, используйте механизмы, предоставляемые стандартной библиотекой C++ (STL). К ним относятся, например, unique_ptr
и контейнеры, такие как.shared_ptr
vector
Дополнительные сведения см. в разделе "Смарт-указатели " и "Стандартная библиотека C++".
См. также
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по