C6262
Aggiornamento: novembre 2007
C6262
avviso C6262: La funzione utilizza <costante> byte dello stack e supera /analyze:stacksize<costante>. Si consiglia di spostare dei dati nell'heap
Questo avviso indica che all'interno di una funzione è stato rilevato un utilizzo dello stack che supera una soglia preimpostata. La dimensione dello stack predefinita per questo avviso è 16 KB. Lo stack, anche in modalità utente, è limitato e la mancata riuscita del commit di una pagina provoca un'eccezione di overflow dello stack. La funzione _resetstkoflw consente di recuperare da una condizione di overflow dello stack, consentendo a un programma di continuare invece di restituire un errore di eccezione irreversibile. Se la funzione _resetstkoflw non viene chiamata, dopo l'eccezione precedente non è presente alcun guard page. Al successivo overflow dello stack non ci sarà alcuna eccezione e il processo terminerà senza alcun avviso.
Per risolvere il problema, è possibile spostare alcuni dati nella memoria heap o migliorare la dimensione dello stack. In entrambi i casi, prima di apportare modifiche è necessario considerare i vantaggi e gli svantaggi dell'approccio scelto.
Esempio
Il codice riportato di seguito genera l'avviso perché char buffer alloca 16382 byte e la variabile locale integer i alloca altri 4 byte, e insieme superano il limite di dimensione dello stack predefinito di 16 KB.
#include <windows.h>
#define MAX_SIZE 16382
void f( )
{
int i;
char buffer[MAX_SIZE];
i = 0;
buffer[0]='\0';
// code...
}
Il codice seguente risolve il problema spostando alcuni dati nella memoria heap:
#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);
}
}
Per risolvere il problema regolando la dimensione dello stack, attenersi alla procedura seguente:
Scegliere Proprietà dal menu Progetto.
Verrà visualizzata la finestra di dialogo Pagine delle proprietà.
Espandere la struttura Proprietà di configurazione.
Espandere la struttura C/C++.
Fare clic sulle proprietà Riga di comando.
In Opzioni aggiuntive aggiungere /analyze:stacksize16388.
Vedere anche
Attività
Procedura: utilizzare controlli runtime nativi