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.