Uyarı C6262
İşlev constant_1 bayt yığın kullanır: /analyze:stacksize constant_2 aşıyor. Bazı verileri yığına taşımayı göz önünde bulundurun
Açıklamalar
Bu uyarı, bir işlevde önceden belirlenmiş eşiği (constant_2) aşan yığın kullanımının algılandığını gösterir. Bu uyarının varsayılan yığın çerçevesi boyutu kullanıcı modu için 16 KB, çekirdek modu için 1 KB'tır. Kullanıcı modunda bile yığın sınırlıdır ve yığın sayfasının işlenememesi yığın taşması özel durumu oluşturur. Çekirdek modunun 12 KB yığın boyutu sınırı vardır ve bu sınır artırılamaz. Çekirdek modu kodunda yığın kullanımını agresif bir şekilde sınırlamayı deneyin.
Bu uyarının arkasındaki sorunu düzeltmek için, bazı verileri yığına veya diğer dinamik belleğe taşıyabilirsiniz. Kullanıcı modunda büyük bir yığın çerçevesi sorun olmayabilir ve bu uyarı gizlenebilir, ancak büyük bir yığın çerçevesi yığın taşması riskini artırır. (İşlev yığını yoğun olarak kullanıyorsa veya özyinelemeliyse büyük bir yığın çerçevesi oluşabilir.) Yığın taşması gerçekleşirse, ancak yalnızca sistem sınırına kadar kullanıcı modunda toplam yığın boyutu artırılabilir.
Çekirdek modu kodu için (örneğin, sürücü projelerinde) constant_2 değeri 1 KB olarak ayarlanır. İyi yazılmış sürücülerin bu değere yaklaşan birkaç işlevi olmalıdır ve sınırı aşağı doğru değiştirmek tercih edilebilir. Yığın boyutunu küçültmek için kullanıcı modu kodu için kullanılan genel tekniklerin aynısı çekirdek modu koduna uyarlanabilir.
Kod analizi adı: EXCESSIVESTACKUSAGE
Uyarıyı engellemek için yığın boyutunu ayarlama
constant_2 değerini değiştirmek için komut satırı seçeneğini kullanabilirsiniz/analyze:stacksize
, ancak bu değeri artırmak hatanın bildirilmeme riski oluşturur.
Komut satırında uyarıyı bastırmak için
/analyze:stacksize <new-size>
seçeneğini derleyici komut satırına ekleyin. constant_1 daha büyük bir değer<new-size>
kullanın. Örneğin, constant_1 27180 ise girebilirsiniz/analyze:stacksize 32768
.
IDE'de uyarıyı gizleme
Visual Studio IDE'de, Çözüm Gezgini penceresinde projeyi seçin.
Menü çubuğunda Proje>Özellikleri'ni seçin.
Özellik Sayfaları iletişim kutusunda Yapılandırma Özellikleri>C/C++>Komut Satırı özellik sayfasını seçin.
Ek seçenekler'de, constant_1'den büyük olan
<new-size>
öğesini ekleyin/analyze:stacksize <new-size>
. Örneğin, constant_1 27180 ise girebilirsiniz/analyze:stacksize 32768
. Değişikliklerinizi kaydetmek için Tamam'ı seçin.
Örnek
Aşağıdaki kod, yığında 16.382 bayt gerektirdiğinden ve yerel tamsayı değişkeni i
4 bayt daha gerektirdiğinden ve varsayılan yığın boyutu sınırı olan 16 KB'ı aştığından bu uyarıyı char buffer
oluşturur.
// cl.exe /c /analyze /EHsc /W4
#include <windows.h>
#define MAX_SIZE 16382
void f( )
{
int i;
char buffer[MAX_SIZE];
i = 0;
buffer[0]='\0';
// code...
}
Aşağıdaki kod, bazı verileri yığına taşıyarak bu uyarıyı düzeltmektedir.
// cl.exe /c /analyze /EHsc /W4
#include <stdlib.h>
#include <malloc.h>
#define MAX_SIZE 16382
void f( )
{
int i;
char *buffer;
i = 0;
buffer = (char *) malloc( MAX_SIZE );
if (buffer != NULL)
{
buffer[0] = '\0';
// code...
free(buffer);
}
}
ve free
kullanımımalloc
, bellek sızıntıları ve özel durumlar gibi birçok tuzaklara sahiptir. Bu tür sızıntıları ve özel durum sorunlarını tamamen önlemek için C++ Standart Kitaplığı (STL) tarafından sağlanan mekanizmaları kullanın. Bunlar , unique_ptr
ve vector
içerirshared_ptr
. Daha fazla bilgi için bkz . Akıllı İşaretçiler ve C++ Standart Kitaplığı.
Ayrıca bkz.
/STACK
(Yığın ayırmaları)
_resetstkoflw
Nasıl yapılır: Yerel çalışma zamanı denetimlerini kullanma