C6308

Aviso C6308: 'possível realocar' pode retornar um ponteiro nulo: atribuir um ponteiro nulo para <variable>, que é passado como um argumento para 'possível realocar', fará com que o bloco de memória original vazamento

Este aviso indica um vazamento de memória é o resultado do uso incorreto de uma função de realocação. Funções de realocação de pilha não liberar o buffer passado se realocação não for bem-sucedida. Para corrigir o defeito, atribua o resultado da função de realocação para um emprego temporário e substitua o ponteiro original após a realocação bem-sucedida.

Exemplo

O exemplo de código a seguir gera este aviso:

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

Para corrigir esse aviso, use o seguinte código:

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

Este aviso pode gerar ruído se houver um alias em tempo real para o buffer-para-ser-realocados no momento da atribuição do resultado da função de realocação.