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