Udostępnij za pośrednictwem


Ostrzeżenie C6255

_alloca wskazuje błąd przez zgłoszenie wyjątku przepełnienia stosu. Rozważ użycie _malloca zamiast tego

To ostrzeżenie wskazuje, że wykryto wywołanie metody _alloca poza lokalną obsługą wyjątków.

Uwagi

_alloca należy zawsze wywoływać z zakresu chronionego programu obsługi wyjątków, ponieważ może zgłosić wyjątek przepełnienia stosu w przypadku awarii. Jeśli to możliwe, zamiast używać _allocametody , rozważ użycie metody _malloca, która jest bezpieczniejszą wersją programu _alloca.

Nazwa analizy kodu: UNPROTECTEDUSEOFALLOCA

Przykład

Poniższy kod generuje to ostrzeżenie, ponieważ _alloca może wygenerować wyjątek:

#include <windows.h>

void f( )
{
  void *p = _alloca(10);
  // code ...
}

Aby poprawić to ostrzeżenie, użyj _malloca i dodaj procedurę obsługi wyjątków, jak pokazano w poniższym kodzie:

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

void f( )
{
  void *p;
  int errcode;
  __try
  {
    p = _malloca(10);
    // code...
    _freea(p);
  }
  __except( (GetExceptionCode() == STATUS_STACK_OVERFLOW ) ?
              EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH )
  {
    errcode = _resetstkoflw();
    // code ...
  }
}

Zobacz też

_malloca