C6262
Обновлен: Ноябрь 2007
C6262
Предупреждение C6262: функция использует <константа> байт стека, что превышает /analyze:stacksize<константа>. Попробуйте переместить какие-либо данные в кучу.
Это предупреждение означает, что внутри функции обнаружено использование размера стека, превышающее заранее установленный предел. По умолчанию размер стека для этого предупреждения равен 16 КБ. Размер стека ограничен даже в пользовательском режиме; при невозможности зафиксировать страницу стека возникает ошибка переполнения стека. Функция _resetstkoflw выполняет восстановление после переполнения стека и позволяет программе продолжить работу вместо сбоя с неустранимой ошибкой. Если функция _resetstkoflwне вызывается, то страница защиты после предыдущего исключения не создается. При следующем переполнении стека процесс будет завершен без сообщения об ошибке.
Чтобы исправить это предупреждение, нужно либо переместить какие-либо данные в кучу, либо увеличить размер стека. В обоих случаях перед изменением кода следует рассмотреть преимущества и недостатки выбранного решения.
Пример
Это предупреждение возникает в следующем коде, поскольку char buffer выделяет 16382 байта, а локальная целочисленная переменная i выделяет еще 4 байта; суммарный размер превышает ограничение в 16 килобайт.
#include <windows.h>
#define MAX_SIZE 16382
void f( )
{
int i;
char buffer[MAX_SIZE];
i = 0;
buffer[0]='\0';
// code...
}
В следующем фрагменте кода это предупреждение устраняется путем переноса некоторых данных в кучу:
#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);
}
}
Чтобы исправить это предупреждение путем изменения размера стека, выполните следующие действия:
В меню Проект выберите Свойства.
Откроется диалоговое окно Страницы свойств.
Разверните дерево "Свойства конфигурации".
Разверните дерево "C/C++".
Щелкните "Свойства командной строки".
В разделе Дополнительные параметры добавьте /analyze:stacksize16388.
См. также
Задачи
Практическое руководство. Настройка проверок во время выполнения машинного кода