Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
SEVI
31 / 30 / 0
Регистрация: 26.01.2010
Сообщений: 124
Записей в блоге: 1
#1

"Stack overflow" как обойти? - C++

27.01.2014, 00:17. Просмотров 1573. Ответов 40
Метки нет (Все метки)

Доброго времени суток!
Дело в том, что при объявлении массива размером 106
C++
1
int a[1000000];
выскакивает при запуске (после компиляции даже) stack overflow, еще до того как туда будут заноситься элементы. Дебаггер указывает именно сюда... Тем более если сделать 105, то все работает... Прошу объяснить как это обойти... Заранее спасибо.
Вот весь код (без кода функции двоичной сортировки quickSortR)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int main()
{
    int n, k, i, s=0;
    int a[100000];
    ifstream f1("E.dat");
    ofstream f2("E.sol");
    f1 >> n >> k;
    for (i = 0; i < n; i++) {
        f1 >> a[i];
    }
    quickSortR(a,n-1);
    for (i = k; i < n; i++) {
        s = s + a[i];
    }
    f2 << s;
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.01.2014, 00:17
Здравствуйте! Я подобрал для вас темы с ответами на вопрос "Stack overflow" как обойти? (C++):

Ошибка "stack overflow". Разложение функции в ряд Тейлора - C++
Задание: рекурентно реализовать разложение ф-ии {\sin}^{2} по ряду Тэйлора. Выдает ошибку &quot;Необработанное исключение в &quot;0x00cc18a9&quot; в...

Быстрая сортировка: ошибка "Stack overflow" - C++
Не понмаю, пишет STACK OVERFLOUDED!!!! не знаю в чем проблема. #include &lt;iostream&gt; #include &lt;locale.h&gt; #include &lt;time.h&gt; using...

Ошибка: "Unhandled exception: Stack cookie instrumentation code detected a stack-based buffer overrun" - C++
Не могу понять почему значение ChoiceOfPlayer меняется и почему NumberOfRow и NumberOfColumn всегда последние значение цикла. Помогите...

Как отследить ошибку "Stack around the variable was corrupted."? - C++
Вообщем код большой. Несколько классов, десяток функций. Ошибка всплывает только после завершения функции main(). Вот как бы научить...

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно" - C++
В зависимости от времени года &quot;весна&quot;, &quot;лето&quot;, &quot;осень&quot;, &quot;зима&quot; определить погоду &quot;тепло&quot;, &quot;жарко&quot;, &quot;холодно&quot;, &quot;очень холодно&quot;. Я так...

Чтение файла с данными типа real. Тип real в билдере или как его "обойти"? - C++
Читаю файл в структуру, double Fdat; struct STR { ... } rec

40
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
27.01.2014, 00:26 #2
А в настройках компилятора ничего не меняли? Нормально принял VC++2012 ваш код. Я сам создавал массивы большей длины, тема до боли знакома. Но вы вроде к пределам возможностей 32 разрядной системы и близко не подошли.
0
SEVI
31 / 30 / 0
Регистрация: 26.01.2010
Сообщений: 124
Записей в блоге: 1
27.01.2014, 00:35  [ТС] #3
mustimur, а вы в коде меняли на 1000000? А то я оставил случайно 100000... У меня VC++2013. Настроек не менял...
0
Craw
235 / 46 / 4
Регистрация: 10.06.2012
Сообщений: 268
Записей в блоге: 1
27.01.2014, 00:36 #4
Проверьте, возможно где-то в файле есть число, большее чем 231-1 (2 147 483 647). Либо n>106.
0
SEVI
31 / 30 / 0
Регистрация: 26.01.2010
Сообщений: 124
Записей в блоге: 1
27.01.2014, 00:38  [ТС] #5
Craw, да вот в том то и дело что чисел 6. И они все не привышают 100. И проблема начинается еще до заполнения. И как я говорил проблема пропадает, когда я меняю с 106 на 105...
0
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
27.01.2014, 00:45 #6
Цитата Сообщение от SEVI Посмотреть сообщение
mustimur, а вы в коде меняли на 1000000? А то я оставил случайно 100000... У меня VC++2013. Настроек не менял...
Да тоже начал вылетать, но если записать так то работает:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <cstring>
#include <fstream>
using namespace std;
 
int main()
{
    int n, k, i, s=0;
    int *a=new int[1000000];
    ifstream f1("E.dat");
    ofstream f2("E.sol");
    f1 >> n >> k;
    for (i = 0; i < n; i++) {
        f1 >> a[i];
    }
    //quickSortR(a,n-1);
    for (i = k; i < n; i++) {
        s = s + a[i];
    }
     f2 << s;
     delete [] a;
     return 0;
}
Добавлено через 4 минуты
16 строчку раскоментировать забыл
0
SEVI
31 / 30 / 0
Регистрация: 26.01.2010
Сообщений: 124
Записей в блоге: 1
27.01.2014, 00:47  [ТС] #7
mustimur, хм... интересно... а почему же тогда не работает тот вид записи... Спасибо! Учту...
Может я ошибаюсь, но этот вид записи используется при динамическом программировании... И получается память выделяется по мере заполнения?
0
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
27.01.2014, 00:54 #8
Цитата Сообщение от SEVI Посмотреть сообщение
Может я ошибаюсь, но этот вид записи используется при динамическом программировании... И получается память выделяется по мере заполнения?
Да это динамический массив, но память по него выделяется полностью и сразу в момент определения, в данном случае когда программа доходит до 9 строчки, а освобождается на 21 строчке.
0
SEVI
31 / 30 / 0
Регистрация: 26.01.2010
Сообщений: 124
Записей в блоге: 1
27.01.2014, 01:10  [ТС] #9
mustimur, кстати говоря у меня работает только без
C++
1
delete [] a;
0
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
27.01.2014, 01:15 #10
А с ней ошибку выдает? Это строчка освобождения памяти выделенного под массив. В данном случае не обязательна так память освободится после выполнения программы, но если ты допустим организуешь цикл объявление, то это чревато утечками памяти
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
27.01.2014, 08:30 #11
Должно быть полезно Почему прога может зависать при инициализации массива
1
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
27.01.2014, 10:35 #12
Цитата Сообщение от Tulosba Посмотреть сообщение
Должно быть полезно Почему прога может зависать при инициализации массива
А думаете целесообразно менять размер стека? Я не рискнул бы давать такой совет, лучше память выделять динамически на кучи.
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
27.01.2014, 10:40 #13
Цитата Сообщение от mustimur Посмотреть сообщение
А думаете целесообразно менять размер стека?
Я и не рекомендую менять этот размер. См сообщение: Почему прога может зависать при инициализации массива
0
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
27.01.2014, 10:46 #14
Цитата Сообщение от Tulosba Посмотреть сообщение
Я и не рекомендую менять этот размер.
Извините не внимательно прочел , просто общая мысль той темы изменение размера стека. Вы то как раз даете рекомендацию аналогично моей
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
27.01.2014, 10:49 #15
mustimur, решений проблемы может быть несколько. Самое простое - изменить размер стека, но при этом оно не самое правильное.
0
27.01.2014, 10:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.01.2014, 10:49
Привет! Вот еще темы с ответами:

Предупреждение компилятора "integer overflow in expression" - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; int main() { int a, b; double c;

Реализовать классы "Воин", "Пехотинец", "Винтовка", "Матрос", "Кортик" (наследование) - C++
Разработать программу с использованием наследования классов, реализующую классы: − воин; − пехотинец(винтовка); − матрос(кортик). ...

Ошибка "pow : OVERFLOW error" - C++
Вот функция , x записать как константу, b вводить з клавиатуры. А вот код но он не пашет, пашет только первый две функции а дальше ошибка....

Ошибка "pow() overflow error" - C++
Помогите плз составить код на C++ Я начал составлять но столкнулся с проблемой pow overflow error Вот код, который я написал...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru