В моей программе было 1000 циклов с массивами по 1000 элементов. Когда я увеличил кол-во циклов до 10000 циклов и массивы до 10000 элементов, программа при запуске цикла выдает ошибку Project1.exe raised exception class EStack Overflow with message Stack overflow. Process stopped. Use Step or Run to continue.
Здравствуйте DmitriAl, Вы писали:
DA>В моей программе было 1000 циклов с массивами по 1000 элементов. Когда я увеличил кол-во циклов до 10000 циклов и массивы до 10000 элементов, программа при запуске цикла выдает ошибку Project1.exe raised exception class EStack Overflow with message Stack overflow. Process stopped. Use Step or Run to continue.
DA>Компилятор: C++Builder 5
У тебя ошибка в строке 13.
(Если я номер строки не смог точно определить, не обижайся,
ведь саму программу то ты не привел )
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Re[2]: EStackOverflow with message Stack overflow
От:
Аноним
Дата:
24.08.02 15:39
Оценка:
A>У тебя ошибка в строке 13. A>(Если я номер строки не смог точно определить, не обижайся, A>ведь саму программу то ты не привел ) :))
Здравствуйте DmitriAl, Вы писали:
DA>В моей программе было 1000 циклов с массивами по 1000 элементов. Когда я увеличил кол-во циклов до 10000 циклов и массивы до 10000 элементов, программа при запуске цикла выдает ошибку Project1.exe raised exception class EStack Overflow with message Stack overflow. Process stopped. Use Step or Run to continue.
DA>Компилятор: C++Builder 5
Выделяй память для массивов динамически
Если при компиляции и исполнении вашей программы не происходит ни одной ошибки — это ошибка компилятора :)))
Здравствуйте Аноним, Вы писали:
А>Причем тут строка 13? Там все нормально.
Я над тобой прикалываюсь, код в студию,
телепатов тут нет.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте DmitriAl, Вы писали:
DA>В моей программе было 1000 циклов с массивами по 1000 элементов. Когда я увеличил кол-во циклов до 10000 циклов и массивы до 10000 элементов, программа при запуске цикла выдает ошибку Project1.exe raised exception class EStack Overflow with message Stack overflow. Process stopped. Use Step or Run to continue.
DA>Компилятор: C++Builder 5
Есть подозрение что Вы передаете массив как простой параметр
какой-либо функции, тогда он весь полезет в стек, лучше массив
передавать как const или как var параметр (передача по ссылке)
Здравствуйте Anatolix, Вы писали:
A>Здравствуйте Аноним, Вы писали:
А>>Причем тут строка 13? Там все нормально.
A>
A>Я над тобой прикалываюсь, код в студию, A>телепатов тут нет.
А зачем код???
человек же написал, что в 10 раз увеличил количество итераций + в 10 раз увеличил необходимый размер стека (наверняка же массив описан просто как локальная переменная)
Если при компиляции и исполнении вашей программы не происходит ни одной ошибки — это ошибка компилятора :)))
Здравствуйте Hacker_Delphi, Вы писали:
HD>Здравствуйте Anatolix, Вы писали:
HD>человек же написал, что в 10 раз увеличил количество итераций + в 10 раз увеличил необходимый размер стека (наверняка же массив описан просто как локальная переменная)
Количество итераций не должно влиять если только не рекурсия.
Кроме того это помоему вообще не правильно задавать вопрос и говорить
"угадайте что у меня за баг"
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте Anatolix, Вы писали:
A>Здравствуйте Hacker_Delphi, Вы писали:
HD>>Здравствуйте Anatolix, Вы писали:
HD>>человек же написал, что в 10 раз увеличил количество итераций + в 10 раз увеличил необходимый размер стека (наверняка же массив описан просто как локальная переменная)
A>Количество итераций не должно влиять если только не рекурсия. A>Кроме того это помоему вообще не правильно задавать вопрос и говорить A>"угадайте что у меня за баг"
Согласен. Про количество итераций: есть подозрение, что получается (в результате) 10000*10000 элементов массива. Вряд ли они меньше, чем целое итого размер = 10^4 * 10^4 * 4 = 4 * 10^8 = ~ 2^28 + 2^27 (примерная оценка на основании того, что 10^3 = ~2^10
Если при компиляции и исполнении вашей программы не происходит ни одной ошибки — это ошибка компилятора :)))
Здравствуйте Hacker_Delphi, Вы писали:
HD>Согласен. Про количество итераций: есть подозрение, что получается (в результате) 10000*10000 элементов массива. Вряд ли они меньше, чем целое итого размер = 10^4 * 10^4 * 4 = 4 * 10^8 = ~ 2^28 + 2^27 (примерная оценка на основании того, что 10^3 = ~2^10
Если массив динамический то он в любом случае не в стеке лежит.
А если он сразу размещает массив для всех итераций то дело не в
количестве итераций а в начальном размере массива. А итерации
тут уже не при чем.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте Anatolix, Вы писали:
A>Здравствуйте Hacker_Delphi, Вы писали:
HD>>Согласен. Про количество итераций: есть подозрение, что получается (в результате) 10000*10000 элементов массива. Вряд ли они меньше, чем целое итого размер = 10^4 * 10^4 * 4 = 4 * 10^8 = ~ 2^28 + 2^27 (примерная оценка на основании того, что 10^3 = ~2^10
A>Если массив динамический то он в любом случае не в стеке лежит. A>А если он сразу размещает массив для всех итераций то дело не в A>количестве итераций а в начальном размере массива. А итерации A>тут уже не при чем.
если речь идет о Ц++ — он может его выделять в теле цикла, потому и ломается при входе в цикл %)
Если при компиляции и исполнении вашей программы не происходит ни одной ошибки — это ошибка компилятора :)))
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте DmitriAl, Вы писали:
DA>Поэтому массивы лучше объявлять как глобальные переменные?
НЕВЕРНО. Большие Массивы лучше распределять на куче посредством AllocMem/ReAllocMem/FreeMem. (хотя FreeMem заменяется на ReAllocMem(Ptr, 0) )
И передавать массивы в параметрах надо через ссылки.
Если при компиляции и исполнении вашей программы не происходит ни одной ошибки — это ошибка компилятора :)))
Re[10]: EStackOverflow with message Stack overflow
Здравствуйте Anatolix, Вы писали:
A>Здравствуйте Hacker_Delphi, Вы писали:
HD>>если речь идет о Ц++ — он может его выделять в теле цикла, потому и ломается при входе в цикл %)
A>Но от количества итераций цикла это не зависит A>Не важно там i<100 или i<10000
A>Разницы нет.
A>
A> for(int i=0;i<10000;i++)
A> {
A> char[100] c;
A> }
A> for(int i=0;i<100;i++)
A> {
A> char[100] c;
A> }
A>
Что-то в этом утверждении есть несомненно есть. Надо подумать, по-моему, я встречал где-то код, у которого стек от размеров цикла зависил Сов. серьезно, правда, насколько я помню, он там совсем кривой был
Если при компиляции и исполнении вашей программы не происходит ни одной ошибки — это ошибка компилятора :)))