|
Модераторы: Snowy, MetalFan, bems, Poseidon |
|
Kbl4AH |
|
||||
Опытный Профиль Группа: Участник Сообщений: 741 Регистрация: 1.4.2008 Где: Вятка Репутация: 4 Всего: 15 |
Здравствуйте...
Читаю книгу по BDS2006, в ней был пример (код и екзешник) консольного приложения для делфи вин32... Екзешник работает нормально... скопировал код в свой проект - ошибка, каких я еще никада не видел... Почему так? Что не корректно в коде? Код:
Результат выполнения:
|
||||
|
|||||
SneG0K |
|
|||
Max Mara Профиль Группа: Завсегдатай Сообщений: 1887 Регистрация: 1.12.2007 Где: Wis Dells Репутация: 3 Всего: 54 |
У меня все отлично выполняется. Думаю, что это проблема с IDE. У меня Delphi7
Присоединённый файл ( Кол-во скачиваний: 5 ) dpr.rar 21,44 Kb |
|||
|
||||
SneG0K |
|
|||
Max Mara Профиль Группа: Завсегдатай Сообщений: 1887 Регистрация: 1.12.2007 Где: Wis Dells Репутация: 3 Всего: 54 |
||||
|
||||
CodeMonkey |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 29 Всего: 89 |
Как насчёт попробовать:
-------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
|||
|
||||
Kbl4AH |
|
||||||||
Опытный Профиль Группа: Участник Сообщений: 741 Регистрация: 1.4.2008 Где: Вятка Репутация: 4 Всего: 15 |
Пробовал делать трассировку... Кажется, что проблема в строке
при комменте врайтэлена все нормально или при добавлении
тоже все отрабатывает, но не корректно (почему-то кошачий возраст становится 1)... В общем, как-то загадочно для меня((( Вставил
Поэтому вопрос... 1) Как понять 'Думаю, что это проблема с IDE.'? 2) Что-то в памяти не так делается? Без принудительного заполнения памяти для указателя рандомом что ли заполняет у меня? Можно услышать пару слов о происходящем в памяти в случае без филлчара? Это сообщение отредактировал(а) Kbl4AH - 26.2.2009, 09:51 |
||||||||
|
|||||||||
CodeMonkey |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 29 Всего: 89 |
Этот вопрос требует дальнейшего исследования. Вообще, после New FillChar не нужен. Так указано в документации. Поэтому это-то и странно.
-------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
|||
|
||||
CodeMonkey |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 29 Всего: 89 |
Ага, попался.
На самом деле FillChar всё же нужен. Это баг в исходном тексте книжки. И вот почему. Из New выходит частично-инициализированная структура (в отличие от GetMem, из которого выходит вовсе не инициализированная структура). Частичная инициализация означает, что все динамические типы данных гарантировано равны nil. Значение остальных полей не определено. Поэтому после New(MyDynamicCat) у вас MyDynamicCat^.Name = nil, а поля Age и Hungry заполнены мусором. Так получается, что в D7 и D2006 этот мусор выглядит по-разному, и в одном случае вылет происходит, а в другом - нет. Почему вообще происходит вылет? Проблема действительно сидит в строке WriteLn('Hungry: ', HUNGRY_STRING[Hungry]). Если Hungry у нас мусор (а не 0 или 1, как ожидает этого код), то HUNGRY_STRING[Hungry] трактует некоторое место в вашей программе как строку. Но там лежат строки только для индексов 0 и 1. Для всех прочих индексов там тоже мусор. Поэтому вывод WriteLn('Hungry: ', HUNGRY_STRING[Hungry]) на самом деле пытается вывести на консоль какую-то область памяти (случайную), пытаясь трактовать её как строку. -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
|||
|
||||
Kbl4AH |
|
|||
Опытный Профиль Группа: Участник Сообщений: 741 Регистрация: 1.4.2008 Где: Вятка Репутация: 4 Всего: 15 |
CodeMonkey, SneG0K, спасибо!
|
|||
|
||||
Правила форума "Delphi: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |