Compartir a través de


C6263

Actualización: noviembre 2007

C6263

Advertencia C6263: Se utilizará _alloca en un bucle: esto puede provocar un rápido desbordamiento de pila

Esta advertencia indica que llamar a _alloca dentro de un bucle para asignar memoria pueden producir un desbordamiento de pila. _alloca asigna memoria de la pila, pero esa memoria sólo se libera cuando sale la función de llamada. La pila está limitada incluso en modo de usuario y un error al confirmar una página de la pila provoca una excepción de desbordamiento de pila. La función _resetstkoflw se recupera de una condición del desbordamiento de pila, lo que permite que el continúe en lugar de generar un error de excepción grave. Si no se llama a la función _resetstkoflw, no queda ninguna página de protección después de la excepción anterior. La próxima vez que haya un desbordamiento de pila, no habrá ninguna excepción en absoluto y el proceso finalizará sin avisar.

Debe evitar llamar a _allocadentro de un bucle si el tamaño de asignación o el número de iteraciones es desconocido, porque podría producir un desbordamiento de pila. En estos casos, considere otras opciones como, por ejemplo, memoria de montón o las clases Standard C++ Library Reference.

Ejemplo

El código siguiente genera esta advertencia:

#include <windows.h>
#include <malloc.h>
#include <excpt.h>
#include <stdio.h>

#define MAX_SIZE 50

void f ( int size )
{
  char* cArray;
  __try
  {
    for(int i = 0; i < MAX_SIZE; i++)
    {
      cArray = (char *)_alloca(size);

     // process cArray...
    }
  }
  __except(GetExceptionCode() == STATUS_STACK_OVERFLOW ? 
              EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH )
  {
     // code...
     puts("Allocation Failed");
    _resetstkoflw();
  }
}

El código siguiente utiliza malloc() para corregir esta advertencia:

#include <windows.h>
#define MAX_SIZE 50

void f ( int size )
{
  char* cArray;

  for(int i = 0; i < MAX_SIZE; i++)
  {
     cArray = (char *) malloc(size);
     if (cArray != NULL)
     {
       // process cArray...
       free(cArray);
     }
  }
}

Vea también

Referencia

malloc

_alloca

_malloca

Otros recursos

Standard C++ Library Reference