Condividi tramite


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:

  1. Scegliere Proprietà dal menu Progetto.

    Verrà visualizzata la finestra di dialogo Pagine delle proprietà.

  2. Espandere la struttura Proprietà di configurazione.

  3. Espandere la struttura C/C++.

  4. Fare clic sulle proprietà Riga di comando.

  5. In Opzioni aggiuntive aggiungere /analyze:stacksize16388.

Vedere anche

Attività

Procedura: utilizzare controlli runtime nativi

Riferimenti

/STACK (Allocazioni stack)

_resetstkoflw