C6255

تحذير 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