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.