Partager via


C6262

avertissement C6262 : la fonction utilise <constante> octets de pile : dépasse /analyze:stacksize<constante>. Si possible, déplacez certaines données vers le tas

Cet avertissement indique qu'un dépassement de l'utilisation de la pile par rapport à un seuil prédéfini a été détecté dans une fonction. La taille de la pile par défaut pour cet avertissement est de 16K octets. La pile est limitée même en mode utilisateur, et l'échec de la validation d'une page de pile génère une exception de dépassement de capacité de la pile. La fonction _resetstkoflw est récupérée à partir d'une condition de dépassement de capacité de la pile, en autorisant un programme à continuer au lieu d'échouer en provoquant une erreur d'exception irrécupérable. Si la fonction _resetstkoflw n'est pas appelée, aucune page de garde n'est créée après la précédente exception. Lors du prochain dépassement de capacité de la pile, aucune exception n'est levée et le processus s'achève sans avertissement.

Pour corriger cet avertissement, vous pouvez déplacer certaines données vers le tas ou augmenter la taille de la pile. Dans les deux cas, vous devez déterminer les avantages et les inconvénients de l'approche choisie avant de modifier votre code.

Exemple

Le code suivant génère cet avertissement car char buffer alloue 16382 octets, et la variable de type entier locale i alloue 4 octets supplémentaires, qui dépassent au total la limite de taille de la pile par défaut de 16K octets :

#include <windows.h>
#define MAX_SIZE 16382

void f( )
{
  int i;
  char buffer[MAX_SIZE];
  
  i = 0;
  buffer[0]='\0';

  // code...
}

Le code suivant corrige cet avertissement en déplaçant certaines données vers le tas :

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

Pour corriger cet avertissement en modifiant la taille de la pile, procédez comme suit :

  1. Dans le menu Projet, cliquez sur Propriétés.

    La boîte de dialogue Pages de propriétés s'affiche.

  2. Développez l'arborescence Propriétés de configuration.

  3. Développez l'arborescence C/C++.

  4. Cliquez sur la page de propriétés Ligne de commande.

  5. Dans Options supplémentaires, ajoutez /analyze:stacksize16388.

Voir aussi

Tâches

Comment : utiliser les contrôles natifs à l'exécution

Référence

/STACK (Allocations de la pile)

_resetstkoflw