Sdílet prostřednictvím


C6308

upozornění C6308: funkce "realloc" může vrátit NULL ukazatel: přiřazení ukazatele s 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ázkový kód 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ěť.