Compartilhar via


C6308

Aviso C6308: 'realocar' pode retornar um ponteiro nulo: atribuir um ponteiro nulo para <variável>, que é passado sistema autônomo um argumento para 'realocar', fará com que o bloco de memória original vazamento

Este aviso indica um perda 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 a temporário e, em seguida, substituir o ponteiro original após a realocação bem-sucedida.

Exemplo

O código de exemplo 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);
  }
}

Esse aviso pode gerar Ruídos se houver um alias em time real para o buffer-realocados no momento da atribuição do resultado da função de realocação.