Aracılığıyla paylaş


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);
     }
  }
}

Ayrıca bkz.

Başvuru

malloc

_alloca

_malloca

Diğer Kaynaklar

Standart C++ Kitaplık Başvurusu