C6255
ostrzeżenie C6255: _alloca wskazuje błąd poprzez wywołanie wyjątku przepełnienia stosu.Należy rozważyć użycie zamiast niego _malloca
To ostrzeżenie wskazuje, że wywołanie _alloca zostało wykryte poza lokalną obsługą wyjątków._alloca powinna być zawsze wywołana z chronionego zakresu obsługi wyjątków, ponieważ może wywołać wyjątek przepełnienia stosu w wypadku niepowodzenia.Jeśli to możliwe, zamiast używać _alloca, należy rozważyć użycie _malloca które jest bezpieczniejszą wersją _alloca.
Przykład
Poniższy kod generuje to ostrzeżenie, ponieważ _alloca może generować wyjątek:
#include <windows.h>
void f( )
{
void *p = _alloca(10);
// code ...
}
Aby poprawić to ostrzeżenie, użyj _malloca i dodaj obsługę 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 ...
}
}