EStackOverflow with message Stack overflow
От: DmitriAl  
Дата: 24.08.02 09:10
Оценка:
В моей программе было 1000 циклов с массивами по 1000 элементов. Когда я увеличил кол-во циклов до 10000 циклов и массивы до 10000 элементов, программа при запуске цикла выдает ошибку Project1.exe raised exception class EStack Overflow with message Stack overflow. Process stopped. Use Step or Run to continue.

Компилятор: C++Builder 5
Re: EStackOverflow with message Stack overflow
От: Anatolix Россия https://www.linkedin.com/in/anatolix/
Дата: 24.08.02 10:16
Оценка: 5 (1)
Здравствуйте 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>ведь саму программу то ты не привел ) :))

Причем тут строка 13? Там все нормально.
Re: EStackOverflow with message Stack overflow
От: Hacker_Delphi Россия  
Дата: 24.08.02 17:23
Оценка:
Здравствуйте 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

Выделяй память для массивов динамически
Если при компиляции и исполнении вашей программы не происходит ни одной ошибки — это ошибка компилятора :)))
Re[3]: EStackOverflow with message Stack overflow
От: Anatolix Россия https://www.linkedin.com/in/anatolix/
Дата: 25.08.02 06:40
Оценка:
Здравствуйте Аноним, Вы писали:

А>Причем тут строка 13? Там все нормально.




Я над тобой прикалываюсь, код в студию,
телепатов тут нет.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Re: EStackOverflow with message Stack overflow
От: NeuroVirus Россия  
Дата: 27.08.02 11:58
Оценка: 15 (1)
Здравствуйте 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 параметр (передача по ссылке)
Re[4]: EStackOverflow with message Stack overflow
От: Hacker_Delphi Россия  
Дата: 28.08.02 05:57
Оценка:
Здравствуйте Anatolix, Вы писали:

A>Здравствуйте Аноним, Вы писали:


А>>Причем тут строка 13? Там все нормально.


A>


A>Я над тобой прикалываюсь, код в студию,

A>телепатов тут нет.
А зачем код???
человек же написал, что в 10 раз увеличил количество итераций + в 10 раз увеличил необходимый размер стека (наверняка же массив описан просто как локальная переменная)
Если при компиляции и исполнении вашей программы не происходит ни одной ошибки — это ошибка компилятора :)))
Re[5]: EStackOverflow with message Stack overflow
От: Anatolix Россия https://www.linkedin.com/in/anatolix/
Дата: 28.08.02 08:54
Оценка: 5 (1)
Здравствуйте Hacker_Delphi, Вы писали:

HD>Здравствуйте Anatolix, Вы писали:


HD>человек же написал, что в 10 раз увеличил количество итераций + в 10 раз увеличил необходимый размер стека (наверняка же массив описан просто как локальная переменная)


Количество итераций не должно влиять если только не рекурсия.
Кроме того это помоему вообще не правильно задавать вопрос и говорить
"угадайте что у меня за баг"
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Re[6]: EStackOverflow with message Stack overflow
От: Hacker_Delphi Россия  
Дата: 28.08.02 09:02
Оценка:
Здравствуйте 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
Если при компиляции и исполнении вашей программы не происходит ни одной ошибки — это ошибка компилятора :)))
Re[7]: EStackOverflow with message Stack overflow
От: Anatolix Россия https://www.linkedin.com/in/anatolix/
Дата: 28.08.02 09:05
Оценка:
Здравствуйте Hacker_Delphi, Вы писали:

HD>Согласен. Про количество итераций: есть подозрение, что получается (в результате) 10000*10000 элементов массива. Вряд ли они меньше, чем целое итого размер = 10^4 * 10^4 * 4 = 4 * 10^8 = ~ 2^28 + 2^27 (примерная оценка на основании того, что 10^3 = ~2^10


Если массив динамический то он в любом случае не в стеке лежит.
А если он сразу размещает массив для всех итераций то дело не в
количестве итераций а в начальном размере массива. А итерации
тут уже не при чем.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Re[8]: EStackOverflow with message Stack overflow
От: Hacker_Delphi Россия  
Дата: 28.08.02 09:11
Оценка:
Здравствуйте 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>тут уже не при чем.
если речь идет о Ц++ — он может его выделять в теле цикла, потому и ломается при входе в цикл %)
Если при компиляции и исполнении вашей программы не происходит ни одной ошибки — это ошибка компилятора :)))
Re[9]: EStackOverflow with message Stack overflow
От: Anatolix Россия https://www.linkedin.com/in/anatolix/
Дата: 28.08.02 09:24
Оценка:
Здравствуйте Hacker_Delphi, Вы писали:

HD>если речь идет о Ц++ — он может его выделять в теле цикла, потому и ломается при входе в цикл %)


Но от количества итераций цикла это не зависит
Не важно там i<100 или i<10000

Разницы нет.

  for(int i=0;i<10000;i++)
  {
    char[100] c;
  }

  for(int i=0;i<100;i++)
  {
    char[100] c;
  }
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Re[7]: EStackOverflow with message Stack overflow
От: DmitriAl  
Дата: 28.08.02 14:10
Оценка:
Поэтому массивы лучше объявлять как глобальные переменные?
Re[8]: EStackOverflow with message Stack overflow
От: Hacker_Delphi Россия  
Дата: 29.08.02 05:27
Оценка:
Здравствуйте DmitriAl, Вы писали:

DA>Поэтому массивы лучше объявлять как глобальные переменные?

НЕВЕРНО. Большие Массивы лучше распределять на куче посредством AllocMem/ReAllocMem/FreeMem. (хотя FreeMem заменяется на ReAllocMem(Ptr, 0) )

И передавать массивы в параметрах надо через ссылки.
Если при компиляции и исполнении вашей программы не происходит ни одной ошибки — это ошибка компилятора :)))
Re[10]: EStackOverflow with message Stack overflow
От: Hacker_Delphi Россия  
Дата: 29.08.02 05:37
Оценка:
Здравствуйте 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>

Что-то в этом утверждении есть несомненно есть. Надо подумать, по-моему, я встречал где-то код, у которого стек от размеров цикла зависил Сов. серьезно, правда, насколько я помню, он там совсем кривой был
Если при компиляции и исполнении вашей программы не происходит ни одной ошибки — это ошибка компилятора :)))
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.