IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Работа с динамикой, Причина ошибки?
Relrin
сообщение 10.04.2011 12:31
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 64
Пол: Мужской

Репутация: -  0  +


Делаю задачу по следующему условию:
Изображение

С того момента, как написал процедуру, которая складывает элементы очередей(например, 1 в первой ячейки очереди А, во второй Б соответственно 2, например. Я их складываю, и значения первой ячейки А, перезаписываю на результат сумму, при этом элемент Б, который использовался, освобождаю с помощью FreeMem.), FreePascal начал выдавать ошибку на указателе (знаке ^) с текстом "Internal Error 200507031", хотя вроде бы как все правильно... Может быть кто-нибудь сталкивался с такой ошибкой, и знает ее решение?

Исходный код программы приведен в аттаче.

Сообщение отредактировано: Relrin - 10.04.2011 12:32


Прикрепленные файлы
Прикрепленный файл  din.pas ( 3.96 килобайт ) Кол-во скачиваний: 134
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 10.04.2011 12:52
Сообщение #2


Гость






Обновляй.

К тому же, есть еще одно место, которое выглядит не очень хорошо (по крайней мере, у меня при запуске начались с ним проблемы). Не используй GetMem/FreeMem, работай с New/Dispose. Вот тут (процедура DivisionDeck):
    {перенос части в очередь а}
if i<=5 then
begin
{переносим в ячейку число (очередь а) из дека}
a.next1^.elem:=c.front^.elem;
{запоминаем ссылку дека}
adr:=c.front^.next;
{переходим к следующей ссылке дека}
c.front^.next:=c.front^.next^.next;
{освобождаем память предыдущей ячейки, т.к. использовалии ее}
{и она нам больше не потребуется в дальнейшем}
{*} FreeMem(adr,SizeOf(adr));
{выделяем память для нового элемента очереди а}
GetMem(a.next1^.next,sizeof(a.next1^.next));
{заносим в нее ссылку}
a.next1^.next:=a.next1^.next^.next;
end

программа падает. Если заменить во всей программе GetMem(X, Size) на New(X), а FreeMem(X, Size) на Dispose(X), то вылета уже не происходит...
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 18:56
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"