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

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

Войти
Регистрация
Восстановить пароль
 
nill
10 / 10 / 0
Регистрация: 16.08.2009
Сообщений: 417
#1

Почему прога может зависать при инициализации массива - C++

24.01.2014, 09:31. Просмотров 382. Ответов 9
Метки нет (Все метки)

Проект в VS2010 простое консольное приложение
Есть массив

C++
1
string vesa_str[25][5][5][10][4];
При его инициализации внутри функции прога зависает.

Проверил в отдельном проекте ничего не зависает.

В чем может быть причина ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.01.2014, 09:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Почему прога может зависать при инициализации массива (C++):

При инициализации массива в отладке не попадаю в обработчик, поясните почему? - C++
имеется два класса struct Integer { explicit Integer(int const &value) : value_(value) { } Integer() ...

Почему при инициализации данных программа работает быстрей? - C++
Почему при инициализации данных программа работает быстрей?

Почему при инициализации строки, сначала создаётся пустой объект? - C++
Чтобы при создании присвоить строке какое-то значение, можно использовать два способа: string str1(”bla-bla-bla”); или string str2 =...

Почему при сборке Releas'а прога без VC++ не идёт? - C++
Прога использует библиотеки ДАО. Собираю как Release, на машине Win 98 она выдаёт ошибку MS VC++ Runtime Error.

Ошибка нарушения прав доступа при чтении по адресу, возникающая при инициализации трехмерного массива - C++
Очень нужна ваша помощь! Я уже не знаю что тут можно сделать. Код части программы, где вылазит ошибка ниже. Коротко о проблеме: я...

Ошибка при инициализации массива - C++
#include <iostream> #include <conio.h> #include <fstream> #include <string> using namespace std; const int MEMORY = 10000; ...

9
castaway
Эксперт С++
4915 / 3023 / 370
Регистрация: 10.11.2010
Сообщений: 11,081
Записей в блоге: 10
Завершенные тесты: 1
24.01.2014, 10:32 #2
В инициализации может быть причина.
Если он внутри функции, то скорее всего недостаточно стековой памяти на 25000 элементов.
0
nill
10 / 10 / 0
Регистрация: 16.08.2009
Сообщений: 417
24.01.2014, 11:34  [ТС] #3
castaway, А как принудительно можно увеличить эту память ?
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
24.01.2014, 11:38 #4
Цитата Сообщение от nill Посмотреть сообщение
А как принудительно можно увеличить эту память ?
http://social.msdn.microsoft.com/For...the-stack-size
1
Ilot
Модератор
Эксперт С++
1823 / 1181 / 232
Регистрация: 16.05.2013
Сообщений: 3,118
Записей в блоге: 5
Завершенные тесты: 1
24.01.2014, 11:38 #5
Храните переменные в куче, динамически выделив память.
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
24.01.2014, 11:46 #6
А вообще, пятимерные массивы до добра не доводят.
0
nill
10 / 10 / 0
Регистрация: 16.08.2009
Сообщений: 417
25.01.2014, 06:25  [ТС] #7
Tulosba,
сделал как написано по ссылке

In my Project ->

Properties -> Configuration Properties -> Linker -> System -> Stack Reserve Size :

увеличил размер Стека(не кучи как по ошибке сделал в первый раз)
И проблема пропала зависания больше нет

Отсюда вопрос чем грозит принудительное увеличение размера стека в проекте VS2010 ?
И какую цифру вообще ставить, поставил как по ссылке 8000000 без понимания что она вообще значит ?
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
25.01.2014, 10:38 #8
Цитата Сообщение от nill Посмотреть сообщение
Отсюда вопрос чем грозит принудительное увеличение размера стека в проекте VS2010 ?
Кроме как будет жрать больше памяти, ничем не грозит.
Цитата Сообщение от nill Посмотреть сообщение
И какую цифру вообще ставить, поставил как по ссылке 8000000 без понимания что она вообще значит ?
Обычно значения, используемого по умолчанию хватает. Поэтому, если стека не хватает, то в первую очередь следует пересмотреть код программы. Перенести данные из стека в кучу например.
2
nill
10 / 10 / 0
Регистрация: 16.08.2009
Сообщений: 417
25.01.2014, 17:10  [ТС] #9
Tulosba, кстати у меня в VS2010 по умолчанию в Stack Reserve Size ничего не написано, по ссылке там пишут что по умолчанию должно быть 65 536
это особенность VS2010 ?
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
25.01.2014, 17:28 #10
Цитата Сообщение от nill Посмотреть сообщение
это особенность VS2010 ?
Размер стека не регламентирован стандартом, если Вы об этом.
Т.е. опираться на какие-то вероятные диапазоны не стоит.

Насчет размера стека по умолчанию для VS2010: http://msdn.microsoft.com/en-us/library/tdkhxaks%28v=vs.100%29.aspx
1
25.01.2014, 17:28
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.01.2014, 17:28
Привет! Вот еще темы с ответами:

Ошибка при инициализации массива - C++
Не понимаю, почему не работает. Массив создается после введения количества его элементов, но все равно компилятор ругается. Код работать...

Ошибка при инициализации массива - C++
В примере есть массив: sf::String TileMap = { " ", " ...

Заполнение массива при инициализации - C++
Доброго времени суток. Имеется следующий код: struct ProcessInfo { HANDLE ProcessHandle; DWORD ProcessID; HANDLE...

Заполнение массива при инициализации - C++
int arr; Как массив сразу заполнить нулями?


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

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

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