C6308
Actualización: noviembre 2007
C6308
Advertencia C6308: 'realloc' puede devolver un puntero nulo: se asignará un puntero nulo a <variable>, que se pasó como argumento en 'realloc', provocará que el bloque de memoria original tenga pérdidas
Esta advertencia indica una pérdida de memoria que es el resultado del uso incorrecto de una función de reasignación. Las funciones de reasignación de montón no liberan el búfer pasado si la reasignación no se realiza correctamente. Para corregir el defecto, asigne el resultado de la función de reasignación a un temporal y, a continuación, reemplace el puntero original después de la reasignación correcta.
Ejemplo
El siguiente ejemplo de código genera esta advertencia:
#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 corregir esta advertencia, utilice el código siguiente:
#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);
}
}
Esta advertencia puede generare ruido si existe un alias activo para el búfer que se va a asignar en el momento de asignar el resultado de la función de reasignación.