Sdílet prostřednictvím


C6308

upozornění C6308: funkce "realloc" může vrátit NULL ukazatel: přiřazení ukazatele s hodnotou NULL proměnné <variable>, která byla jako argument předána funkci "realloc", povede k nevrácení původního paměťového bloku

Toto upozornění znamená únik paměti, který je výsledkem nesprávného použití funkce reallocation.Pokud neproběhne přerozdělení, funkce realokace haldy neuvolní předanou vyrovnávací paměť.Pro napravení této chyby je zapotřebí přiřadit výsledek funkce realokace dočasnému ukazateli a po úspěšné realokaci původní ukazatel nahradit.

Příklad

Následující ukázka kódu generuje toto upozornění:

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

Pro opravu tohoto upozornění použijte následující kód:

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

Toto upozornění může být rušivé, pokud v době přiřazení výsledku funkce realokování existuje aktivní alias na realokovanou vyrovnávací paměť.

Chcete-li zabránit těmto druhům problémů zcela, použijte mechanismy, které jsou k dispozici v knihovně C++ STL.Patří mezi ně shared_ptr, unique_ptr a vector.Další informace naleznete v tématu Chytré ukazatele (moderní verze jazyka C++) a Standardní knihovna C++ – referenční dokumentace.

Viz také

Referenční dokumentace

C6014