Проблемы с выделение памяти

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Проблемы с выделение памяти

Сообщение Aloner » 08.12.2008 16:32:02

Здравствуйте, Форумчане))!
Работаю с FPC 2.2.0 под GO32, возникла следующая проблема: при выделение командой New динамической памяти для указателя, происходит ошибка,на экран выводится не сообщение об ошибке, а случайный набор символов и выбрасывает из FP в консоль, несмотря на то что памяти хватает(проверял командой GetHeapStatus). Мне интересно у кого нить такое было(глюк FPC) ил все таки это моя ошибка? Еще одна деталь: происходит это тогда, когда список из каких либо данных сначала уменьшается, а потом снова увеличивается; если же список просто увеличивается - ошибки нет...
Последний раз редактировалось Aloner 08.12.2008 17:22:25, всего редактировалось 2 раз(а).
Aloner
новенький
 
Сообщения: 13
Зарегистрирован: 08.12.2008 16:18:41

Re: Проблемы с выделение памяти

Сообщение Vadim » 08.12.2008 17:15:11

Aloner
Выкидывает, наверное, не из FPC, а из IDE под названием FP? :) Или именно из Вашей работающей программы обратно в консоль?
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Проблемы с выделение памяти

Сообщение Aloner » 08.12.2008 17:17:35

Туплю насчет FPC, поправил)))
Выкидывает из программы в консоль, причем не выдает внятных комментов почему.
Экзешник в атаче (прощелкивайте на Enter до ошибки).
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось Aloner 08.12.2008 17:27:52, всего редактировалось 1 раз.
Aloner
новенький
 
Сообщения: 13
Зарегистрирован: 08.12.2008 16:18:41

Re: Проблемы с выделение памяти

Сообщение Vadim » 08.12.2008 17:25:25

Код нужен, чтобы потестить.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Проблемы с выделение памяти

Сообщение Aloner » 08.12.2008 17:34:11

Сейчас добавлю, тока не пугайтесь, там много чего эксперементального, так как делал сначала на TP7 а потом портировал на FP)))
А так это в общем скайлайн рендер по Дос
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Aloner
новенький
 
Сообщения: 13
Зарегистрирован: 08.12.2008 16:18:41

Re: Проблемы с выделение памяти

Сообщение Sergei I. Gorelkin » 08.12.2008 18:02:40

Где-то пишется за границу выделенной памяти. Пока список не уменьшается, то по-видимому эта порча не затрагивает менеджер памяти, но стоит затертый блок вернуть обратно - у менеджера срывает крышу.
Поганое свойство этой ошибки - место вылета очень слабо связано с реальным местом нахождения проблемы.

Случайный набор символов вместо сообщения обусловлен, скорее всего, тем, что FPC при форматировании сообщения обращается к менеджеру памяти - который к этому моменту накрылся медным тазом...

Под Линуксом такую ошибку сравнительно несложно вычислить с помощью valgrind+memcheck, но под Go32v2 этот номер не пройдет. Можно попробовать скомпилить с ключами -gttt, или с -gh.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1406
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: Проблемы с выделение памяти

Сообщение Aloner » 08.12.2008 22:57:11

Sergei I. Gorelkin
Спасибо, попробую с ключами.

Добавлено спустя 7 минут 7 секунд:
С ключом -gh получил следующее(в атаче). Можете пояснить про вторую ошибку, что то я не оч понял.

Добавлено спустя 12 минут 16 секунд:
Вот кстати рабочий проект, если кому интересно.
Оч тормозит так как: еще мало оптимизировал + еще не оптимизированый рельефный мэппинг и 2 источника света (красный и зеленый).
2 варианта: для 24(Радеоны в основном) и 32(НВидиа) битных карт.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Aloner
новенький
 
Сообщения: 13
Зарегистрирован: 08.12.2008 16:18:41

Re: Проблемы с выделение памяти

Сообщение Sergei I. Gorelkin » 09.12.2008 00:44:20

Вторая ошибка - сообщение об обнаружении записи за границу блока памяти, чего собственно и следовало ожидать. heaptrc добавляет к каждому выделяемому блоку сигнатуру, а при освобождении ее проверяет. При несовпадении выводит адрес памяти, его содержимое и то, что там должно было быть.
Только (я стормозил) надо к ключам компиляции еще -gl добавлять, тогда в дополнение к цифрам будет писать названия процедур.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1406
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: Проблемы с выделение памяти

Сообщение Aloner » 09.12.2008 03:53:24

Еще раз спасибо! :D
Добавил я ключ -gl - он подписал процедуры, но только к первой ошибке с FPU, к ошибке насчет памяти он процедуры не подписал (
Почему происходит запись за границу блока? (
Aloner
новенький
 
Сообщения: 13
Зарегистрирован: 08.12.2008 16:18:41

Re: Проблемы с выделение памяти

Сообщение Aloner » 10.12.2008 12:44:14

Что то нет ответов....эх...
Я кстати в прилагаемом коде комментарием выделил строчку (функция New), на которой происходит вылет.
Еще вот: использую фришные двумерные динамические массивы. Может из-за них проблемы?
А так уже сто раз проверил, вроде с указателя не накосячил.
Aloner
новенький
 
Сообщения: 13
Зарегистрирован: 08.12.2008 16:18:41

Re: Проблемы с выделение памяти

Сообщение Aloner » 11.12.2008 22:45:50

Вот еще вопрос, только он совсем "детский": как можно заменить оператор Mem, а то приходиться к нему обращаться для вывода каждого пиксела из буфера на экран (видеорежим 10fh 320х200 32/24 бита без LFB), а хотелось бы копировать блоками по 64 кб?
Отниситесь с понимание к вопросу)))
Aloner
новенький
 
Сообщения: 13
Зарегистрирован: 08.12.2008 16:18:41

Re: Проблемы с выделение памяти

Сообщение Aloner » 13.12.2008 22:10:49

Все, всем спасибо за ответы!
Проблема с вылетом решилась: выкинул фришные динамические массивы, заменил их на связку указатель+GetMem.
Осталось теперь с Мем разобраться...
Aloner
новенький
 
Сообщения: 13
Зарегистрирован: 08.12.2008 16:18:41


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6

Рейтинг@Mail.ru