![]() |
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]() ![]() ![]() |
|
Codegrammer |
|
|||
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 1.4.2008 Репутация: нет Всего: нет |
Люди, помогите найти ошибку. При входе в цикл выполняется только первая его строчка, потом управление передается в конец программы. Заранее благодарен.
|
|||
|
||||
bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 18 Всего: 88 |
сделай SetLength(s1,length(s)) перед циклом
-------------------- Обижено школьников: 8 |
|||
|
||||
Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 11 Всего: 130 |
А если так?
Т.е. задать начальное значение S1. -------------------- There's nothing left but silent epitaphs. |
|||
|
||||
Codegrammer |
|
|||
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 1.4.2008 Репутация: нет Всего: нет |
bems, спасибо! Все работает.
Насколько я понял, проблема в том, что длина строки нулевая сначала и компилятор запрещает пользоваться теми данными, которые выходят за эту длину. Я правильно понял? |
|||
|
||||
Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 11 Всего: 130 |
Да, я тоже так понял, что ошибка из-за этого. У меня вообще программа слетает, не то что цикл не работает.
![]() -------------------- There's nothing left but silent epitaphs. |
|||
|
||||
bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 18 Всего: 88 |
Не совсем. Строка нулевой длины это указатель, равный nil. Обращение к первому символу строки это запись в ячейку памяти с адресом 00000000. Этот адрес принадлежит области доступ к которой запрещен всем приложениям, и система (а не компилятор) возбуждает исключение access violation. Если включена range checking, то код проверяющий корректность индекса встраивается в твоею прогу и уже он (а не компилятор) во время выполнения возбуждает исключение ERangeError Добавлено @ 20:39 и вообще проще так:
Это сообщение отредактировал(а) bems - 2.4.2008, 17:21 -------------------- Обижено школьников: 8 |
|||
|
||||
Codegrammer |
|
|||
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 1.4.2008 Репутация: нет Всего: нет |
Разве при объявлении переменной, не выделяется необходимый объем памяти? Насколько я понимаю, должно выделится 255 байт, которые могут быть использованы в данной программе. Получается все объявленные строки при входе в программный блок еще не определены в памяти? Ведь все строки имеют сначала нулевую длину. Или я чего-то не понял ... |
|||
|
||||
bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 18 Всего: 88 |
При объявлении переменной выделяется необходимый объем памяти. Для типа ShortString это 256 байт, для AnsiString - 4 байта для хранения указателя на саму строку, а место под символы выделяется при присваивании.В дельфи (в отличии от ТП) зарезервированое слово String по умолчанию означает AnsiString.
Плюс ко всему есть еще счетчик ссылок на строку (чтобы не хранить в памяти две копии одной строки. Две переменные типа AnsiString могут указывать на один блок памяти) -------------------- Обижено школьников: 8 |
|||
|
||||
Codegrammer |
|
|||
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 1.4.2008 Репутация: нет Всего: нет |
Огромное спасибо за ответ
![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "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. |