Compartir a través de


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.