Freigeben über


C6262

C6262

Warnung C6262: Die Funktion verwendet <Konstante> Bytes vom Stapel und überschreitet /analyze:stacksize<Konstante>. Verschieben Sie einige Daten auf den Heap.

Diese Warnung gibt an, dass in einer Funktion erkannt worden ist, dass die Stapelverwendung einen voreingestellten Schwellenwert überschritten hat. Die standardmäßig verwendete Stapelgröße für diese Warnung ist 16 KB. Für den Stapel gilt – auch im Benutzermodus – eine Beschränkung, und eine fehlgeschlagene Ausführung einer Stapelseite führt zu einem Überlauf des Stapels. Die _resetstkoflw-Funktion sorgt nach Stapelüberläufen für eine Wiederherstellung, sodass ein Programm fortgesetzt werden kann, statt mit einem schwerwiegenden Ausnahmefehler fehlzuschlagen. Wenn die _resetstkoflw-Funktion nicht aufgerufen wird, folgt auf die vorherige Ausnahme keine Schutzseite. Beim nächsten Stapelüberlauf tritt keine Ausnahme auf, und der Prozess wird ohne Ausgabe einer Warnung beendet.

Um diese Warnung zu korrigieren, können Sie Daten auf den Heap verschieben oder die Stapelgröße erhöhen. Bevor Sie Änderungen am Code vornehmen, sollten Sie sich über die Vor- und Nachteile der beiden Methoden im Klaren sein.

Beispiel

Der folgende Code generiert diese Warnung, weil char buffer 16382 Bytes und die lokale ganzzahlige Variable i weitere 4 Bytes zuweist, wodurch die standardmäßige Stapelgröße von 16 KB überschritten wird:

#include <windows.h>
#define MAX_SIZE 16382

void f( )
{
  int i;
  i = 0;
  __try
  {
  char buffer[MAX_SIZE];
  buffer[0]='\0';
  //code ...
  }
  __except(GetExceptionCode() == STATUS_STACK_OVERFLOW)
  {
    _resetstkoflw();
    // code...
  }
}

Im folgenden Code wird diese Warnung korrigiert, indem einige Daten auf den Heap verschoben werden:

#include <stdlib.h>   
#include <malloc.h>
#define MAX_SIZE 16382
void f( )
{
  int i;
  char *buffer;

  buffer = (char *) malloc( MAX_SIZE );
  if (buffer != NULL) 
  {
    buffer[0] = '\0';
    // code...
    i = 0;
    free(buffer);
  }
}

Um diese Warnung durch Anpassen der Stapelgröße zu korrigieren, führen Sie die folgenden Schritte aus:

  1. Klicken Sie im Menü Projekt auf Eigenschaften.

    Das Dialogfeld Eigenschaftenseiten wird angezeigt.

  2. Erweitern Sie den Knoten Konfigurationseigenschaften.

  3. Erweitern Sie den Knoten C/C++.

  4. Klicken Sie auf die Eigenschaftenseite für die Befehlszeile.

  5. Fügen Sie /analyze:stacksize16388 in Zusätzliche Optionen hinzu.

Siehe auch

Aufgaben

Gewusst wie: Verwenden von systemeigenen Laufzeitprüfungen

Referenz

/STACK (Stapelreservierungen)
_resetstkoflw