Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нехватка памяти, Stack overflow error. 
V
    Опции темы
Igor_K
Дата 4.2.2008, 22:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 4.2.2008
Где: Kyiv

Репутация: нет
Всего: нет



Добрый вечер, программисты.
Пишет вам ламер еще тот smile

Вообщем написал лабу, достаточно объемную. 1200 строк кривейшего кода.
Работает, но после длительного пользования ею некоторое время, она вылетает с ошибкой Error 202: Stack overflow error.. Я так понял, что это связано с нехваткой памяти, типа... Я перевел фрагменты кода, гдте требуется достаточно много памяти на динамическую память... Поюзать программу стало можно дольше, но всеравно через определенное время юзания она вылетает с этой ошибкой.

С чем это может быть связано? Можно ли очистить этот стек? Я начинающий в программировании и многого еще не понимаю. Я увеличил размер стека при компиляции, но всеравно походу не хватает.


Еще заоодно задам вопрос. Я так понял, что указатель на память нельзя использовать как счетчик цикла. Или можно? 

Спасибо большое за ответ. 
PM MAIL   Вверх
volvo877
Дата 4.2.2008, 22:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 2
Всего: 116



Цитата(Igor_K @  4.2.2008,  21:33 Найти цитируемый пост)
С чем это может быть связано?

Большой размер процедур/функций, большие локальные массивы или просто много локальных переменных (они размещаются именно в стеке), рекурсия (чем глубже - тем, соответственно, быстрее наступит переполнение стека).

Можешь привести код? Так просто можно будет гораздо быстрее выяснить истинную причину нехватки стека (если не хочешь выкладывать здесь - можешь выслать на "мыло" volvo71<мяу>yandex<dot>ru)...


Цитата(Igor_K @  4.2.2008,  21:33 Найти цитируемый пост)
Я так понял, что указатель на память нельзя использовать как счетчик цикла.
Управляющая переменная цикла должна быть локальной для данной подпрограммы переменной перечислимого типа.
PM MAIL   Вверх
Igor_K
Дата 4.2.2008, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 4.2.2008
Где: Kyiv

Репутация: нет
Всего: нет



ок. я щяс вышлю. Просто не хочу позориться тут с таким кривым кодом.

Добавлено через 13 минут и 11 секунд
Я выслал. Она очень кривая. Компилить лучше в ТурбоПаскаль.
PM MAIL   Вверх
volvo877
Дата 4.2.2008, 23:31 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 2
Всего: 116



Как я и говорил, у тебя рекурсия, причем там, где ты ее и не видишь, наверное: процедура addtodb вызывает mainpage, а mainpage в свою очередь вызывает addtodb. Это неправильная структура программы. Должна быть основная процедура или функция, и из нее - вызов функций, по окончанию работы функции управление должно возвращаться назад (естественным путем, подпрограмма завершилась - управление вернулось к вызвавшей ее части) в основную подпрограмму, а не вызывать эту самую подпрограмму.

Вот когда ты вызываешь из первой процедуры вторую, а из второй - первую, получается рекурсия, причем не простая, а косвенная, которая и пожирает память (больше, чем обычная, естественно, все же заталкивается в стек, который не освобождается, а только заполняется)...

Добавлено через 1 минуту и 4 секунды
Цитата(Igor_K @  4.2.2008,  21:57 Найти цитируемый пост)
Компилить лучше в ТурбоПаскаль. 

А вот это ты зря. Некоторые вещи FreePascal-ем ловятся "на ура", зачем же упускать такую возможность? smile
PM MAIL   Вверх
Igor_K
Дата 4.2.2008, 23:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 4.2.2008
Где: Kyiv

Репутация: нет
Всего: нет



volvo877, спасибо большое за помощь!!! 
Я думал так можно. Теперь буду знать, что нельзя. 
Извини, репутацию не могу добавить... Постов у меня не хватает.

Добавлено через 1 минуту и 34 секунды
В фри-паскаль у меня проблема с таблицей. Криво отображается. 
PM MAIL   Вверх
Igor_K
Дата 5.2.2008, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 4.2.2008
Где: Kyiv

Репутация: нет
Всего: нет



Переделал программу. Вроде теперь такого не наблюдаю.

А можно ли вообще очистить этот стек? Это так вопрос для саморазвития.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.0686 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.