![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
Relrin |
![]()
Сообщение
#1
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 64 Пол: Мужской Репутация: ![]() ![]() ![]() |
Делаю задачу по следующему условию:
![]() С того момента, как написал процедуру, которая складывает элементы очередей(например, 1 в первой ячейки очереди А, во второй Б соответственно 2, например. Я их складываю, и значения первой ячейки А, перезаписываю на результат сумму, при этом элемент Б, который использовался, освобождаю с помощью FreeMem.), FreePascal начал выдавать ошибку на указателе (знаке ^) с текстом "Internal Error 200507031", хотя вроде бы как все правильно... Может быть кто-нибудь сталкивался с такой ошибкой, и знает ее решение? Исходный код программы приведен в аттаче. Сообщение отредактировано: Relrin - 10.04.2011 12:32 Прикрепленные файлы ![]() |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Так. Стоп...
Ты заполнил Дек, так? Проверял, правильно ли он заполнился (т.е., правильно ли установлены указатели)? Процедура PrintDeck у тебя присутствует? Нет. Проверяй... Дальше: разбил дек на 2 очереди. Ты проверил, правильно ли разбил? Процедура PrintQueue есть? Нет. Проверяй... Не надо искать ошибки в последующих действиях, пока не убедился, что все предыдущие выполнены правильно. У тебя такой уверенности нет. Потом. Вот такие конструкции a.next1^.next:=a.next1^.next^.next; с легкостью приводят к вылету программы. Если где-то будет nil или невалидный указатель. Ты опять же этого не поверяешь. Зачем тебе вообще такие многоэтажные конструкции? Что, нельзя сделать сумму очередей, не прибегая к "одноэтажной" адресации? Вот так, в смысле: while q1 <> nil do? Если ты корректно разбил исходную очередь на две одинаковых по длине (зачем был приплетен Дек я тоже не понимаю, в задаче о нем нет ни слова) - то это будет прекрасно работать... Кстати, для того, чтоб разбить длинную очередь на 2 коротких, совсем не обязательно удалять значения из одной очереди и записывать их в другую. Все, что для этого нужно - это переприсвоить 4 указателя. Прописью: четыре!!! И потом можно просто работать с теми же данными, но уже не в виде очереди длиной 2*n, а в виде двух очередей длиной n каждая. Почему работаешь через глобальные переменные - тоже не совсем понятно. Хочется глюки поотлавливать? Вот ты и занимаешься этим. Тебе удалось... Сообщение отредактировано: volvo - 10.04.2011 22:36 |
![]() ![]() |
![]() |
Текстовая версия | 20.07.2025 18:58 |