Поделиться через


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

Чтобы исправить это предупреждение путем изменения размера стека, выполните следующие действия:

  1. В меню Проект выберите Свойства.

    Откроется диалоговое окно Страницы свойств.

  2. Разверните дерево "Свойства конфигурации".

  3. Разверните дерево "C/C++".

  4. Щелкните "Свойства командной строки".

  5. В разделе Дополнительные параметры добавьте /analyze:stacksize16388.

См. также

Задачи

Практическое руководство. Настройка проверок во время выполнения машинного кода

Ссылки

Параметр /STACK (выделение памяти в стеке)

_resetstkoflw