C6263
C6263 Uyarı: _alloca kullanarak bir döngüde; Bu hızlı yığın taşması
Bu uyarı _alloca bellek ayırmak için döngü içinde arama yığın taşmasına neden olabileceğini gösterir.Ancak bu işlevini çağırırken çıktığında bellek yalnızca serbest _alloca yığınından bellek ayırır.Bile, kullanıcı modu yığınının sınırlıdır ve bir yığın taşması özel durum yığın sayfasını kaydetme hatası neden olur._resetstkoflw Gelen bir yığın taşma koşulunu önemli özel durum hatası ile başarısız olan yerine devam etmek bir programın verme işlevi kurtarır._resetstkoflw İşlevinin çağrılmasını değil, sonra önceki istisna hiçbir koruma sayfası vardır.Bir yığın var. bir sonraki açışınızda taşması, hiçbir özel durum yoktur hiç ve herhangi bir uyarı olmadan işlemi sonlandırır.
Arama kaçınmalısınız _alloca yığın taşmasına neden olabilir çünkü ayırma boyutunu veya yineleme sayısı bilinmiyor, döngü içinde.Bu gibi durumlarda, Bellek Kaçağı gibi diğer seçenekleri göz önünde bulundurun ya da Standart C++ Kitaplık Başvurusu sınıfları.
Örnek
Aşağıdaki kod, bu uyarı oluşturur:
#include <windows.h>
#include <malloc.h>
#include <excpt.h>
#include <stdio.h>
#define MAX_SIZE 50
void f ( int size )
{
char* cArray;
__try
{
for(int i = 0; i < MAX_SIZE; i++)
{
cArray = (char *)_alloca(size);
// process cArray...
}
}
__except(GetExceptionCode() == STATUS_STACK_OVERFLOW ?
EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH )
{
// code...
puts("Allocation Failed");
_resetstkoflw();
}
}
Aşağıdaki kod, bu uyarı düzeltmek için malloc () kullanır:
#include <windows.h>
#define MAX_SIZE 50
void f ( int size )
{
char* cArray;
for(int i = 0; i < MAX_SIZE; i++)
{
cArray = (char *) malloc(size);
if (cArray != NULL)
{
// process cArray...
free(cArray);
}
}
}