C6308C6308

Advertencia C6308: 'realloc' puede devolver un puntero nulo: asignar un puntero nulo para <variable >, que se pasa como argumento en 'realloc', hará que el bloque de memoria original se produzca una pérdidawarning C6308: 'realloc' may return null pointer: assigning a null pointer to <variable>, which is passed as an argument to 'realloc', will cause the original memory block to be leaked

Esta advertencia indica una fuga de memoria que es el resultado del uso incorrecto de una función de reasignación.This warning indicates a memory leak that is the result of the incorrect use of a reallocation function. Las funciones de reasignación de montón no liberan el búfer pasado si la reasignación no se realiza correctamente.Heap reallocation functions do not free the passed buffer if reallocation is unsuccessful. 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.To correct the defect, assign the result of the reallocation function to a temporary, and then replace the original pointer after successful reallocation.

EjemploExample

El siguiente ejemplo de código genera esta advertencia:The following sample code generates this warning:

#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:To correct this warning, use the following code:

#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.This warning might generate noise if there is a live alias to the buffer-to-be-reallocated at the time of the assignment of the result of the reallocation function.

Para evitar todos estos tipos de problemas, use los mecanismos proporcionados por la Biblioteca de plantillas estándar (STL) de C++.To avoid these kinds of problems altogether, use the mechanisms that are provided by the C++ Standard Template Library (STL). Puede tratarse de shared_ptr, unique_ptr, y vector.These include shared_ptr, unique_ptr, and vector. Para obtener más información, consulte punteros inteligentes y biblioteca estándar de C++.For more information, see Smart Pointers and C++ Standard Library.

Vea tambiénSee Also

C6014C6014