C6255

更新:2007 年 11 月

警告 C6255:_alloca 通过引发堆栈溢出异常表明失败。考虑改用 _malloca

此警告意味着在本地异常处理的外部检测到对 _alloca 的调用。_alloca 应始终从受保护的异常处理程序范围内调用,因为它在失败时可能会引发堆栈溢出异常。请尽可能避免使用 _alloca,而考虑使用 _malloca,它是 _alloca 的更安全版本。

示例

在下面的代码中,因为 _alloca 会生成异常,所以会生成此警告:

#include <windows.h>

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

若要更正此警告,请使用 _malloca 并添加异常处理程序,如下面的代码所示:

#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 ...
  }
}

请参见

参考

_malloca