C6308

警告 C6308:“realloc”可能返回 null 指针:将 null 指针赋给 <variable>(后者将作为参数传递给“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);
  }
}

如果在分配重新分配函数的结果时,要重新分配的缓冲区有一个正在使用的别名,则此警告可能会产生混淆。

若要完全避免这些问题,请使用 C++ 标准模板库 (STL) 提供的结构。这些包括shared_ptr, unique_ptr, 和 vector有关更多信息,请参见智能指针(现代 C++)C++ 标准库参考

请参见

参考

C6014