| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > проблемы с памятью |
| Автор: ksili 23.12.2005, 10:13 | ||
Есть такой код:
При нажатии на кнопку происходит исключение "Stack overflow". Причем программа прерывается ещё на заголовке функции, т.е. на строке void __fastcall TForm1::Button1Click(TObject *Sender). Если объявления массивов вынести из тела функции, т.е. поместить их сразу за директивами #define, то ещё на этапе линковки проекта происходит ошибка "Assertion failed: !"Bad error code", file VMem.c, line 715". После этого Builder зависает или выгружается. Есть какой-то выход? Или придётся объвлять указатель и динамически выделять память под массивы? |
| Автор: _hunter 23.12.2005, 11:17 |
| а не жирно ли 224 метра на стеке??? само-собой на куче выделять нужно |
| Автор: abrekos 23.12.2005, 14:00 |
| [censored 6] фигня! Правь в настройках компилера размер стека и будет тебе счастье. |
| Автор: Partizan 23.12.2005, 19:24 |
| зачем рыться в настройках...конечно массив надо в куче заводить... |
| Автор: JoyEx 23.12.2005, 19:27 |
| а можно объявить массив как const и он попадет в секцию exeшника |
| Автор: ksili 27.12.2005, 05:46 |
| Размер большой не спорю. Но при чём здесь вообще стек? Разве память под объявляемые переменные выделяется в нём? |
| Автор: Neitron 27.12.2005, 10:39 |
| ksili А где? |
| Автор: ksili 28.12.2005, 06:39 |
| Ну типа в куче Под прогу выделяется память. В начале сегмент кода и сегмент данных. С другого конца растёт стек. А посередине куча. По-моему там и берётся память под все динамически выделяемую переменные |
| Автор: _hunter 28.12.2005, 11:21 |
| под динамические -- да, но с каких это пор unsigned short Otsek[MaxX][MaxY][MaxZ]; стало объявлять динамические массивы? |
| Автор: ksili 28.12.2005, 12:11 |
| Прошу прощения, попутал. Так как уже стал выделять динамически. И всё же стек и сегмент данных - это разные вещи. |
| Автор: _hunter 28.12.2005, 12:48 |
| разные -- никто и не спорит. только ты это к чему?.. |
| Автор: chaos 28.12.2005, 12:55 | ||||||
это только ява все запихивает в кучу(кроме помоиму простейших типов) но это я отвлекся
юзай векторы раз устал Добавлено @ 12:57 типо
|
| Автор: Neitron 30.12.2005, 13:31 |
| Он сказад Стал,а не устал |
| Автор: NixoL 30.12.2005, 20:01 |
| Переменная-то объявляется внутри функции - а все локальные переменные размещаются в стеке... Если я не прав - поправте. |
| Автор: Partizan 31.12.2005, 00:56 | ||
Чувак |