Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на языке Pascal


Информационный Канал Subscribe.Ru

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU
(Тестовый режим)

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Pascal

Выпуск № 21
от 22.02.2005, 01:10

Администратор:Калашников О.А.
В номере:Вопросов: 1, Ответов: 3


Вопрос № 17091
Как реализовать свою функцию обработки ошибки динамически распределяемой области памяти (например, в случае определения очень большого массива) при помощи переменной HeapError? (При попытке присвоения HeapFunc := 1; идет переполнение стека и программа
не запускается)
Отправлен: 16.02.2005, 16:18
Вопрос задала: Candela (статус: Посетитель)
Всего ответов отправлено: 3

Отвечает: Boriss
Здравствуйте, Candela!
Во-первых, переполнение стека с кучей никак не связано. Вашей программе вполне удается разместить все в дианмической памяти (пример отработки в приложении), но, судя по всему) у Вас имеется рекурсивный вызов подпрограммы - и вот это-то и забивает стек. Попробуйте увеличить стек с помощью директивы {$M 43000, 0, 400000}, например. Пишется в самом начале программы

Приложение:

Ответ отправил: Boriss (статус: Профессионал)
Отправлен: 16.02.2005, 18:09

Отвечает: Strory
Здравствуйте, Candela!
Что-то я не пойму, Вы как делали? Так пробовали?
Function HeapFunc(Size: Word): Integer; far;
begin
HeapFunc := 1
end;
begin
HeapError := @HeapFunc;
{...}
end.

Так работает? Если нет, то, пожалуйста, конкретнее, что говорит компилятор? Кстати, а какой компилятор?

PS Просьба ко всем: если вопрос типа "Почему не работает", приводите "не работающий" участок кода (убедитесь, что всё-таки не работает), указывайте номер и текст ошибки, а также название и версию используемого компилятора. Пожалуйста, подробнее!
––< br>Who is DOS? DOS's dead, baby, DOS's dead...

С уважением,
  Strory.
Ответ отправил: Strory (статус: Студент)
Отправлен: 16.02.2005, 18:40

Отвечает: sir henry
Здравствуйте, Candela!
Если я правильно Вас понял, то Вы хотите недопустить выделения динамической памяти больше, чем есть в системе?
Тогда Вам помогут функции:
MemAvail - показывает сколько памяти в Вашей куче вообще;
MaxAvail - какой наибольший непрерывный кусок из кучи Вы можете получить :)
Перед тем, как выделять для чего-либо динамическую память, сначала осведомляетесь, а сколько ее вообще осталось.
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 17.02.2005, 10:22


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2005, Россия, Москва. Идея, дизайн, программирование: Калашников О.А.


http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.pasplus
Отписаться

В избранное