| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Для новичков > Тонкости работы с динамическими массивами. |
| Автор: PsiMagistr 5.7.2010, 15:31 | ||||||
С первой частью вопроса разобрался своими силами, хотя и остались темные места. Так.
Обработчик кнопки:
Поспешил видно стереть. Почему именно при выходе? возможно ли создание динамического массива с одной ячейкой? Пробовал SetLength(Mass,0). Увы... |
| Автор: CodeMonkey 5.7.2010, 15:56 | ||
| 1. SetLength(Mass, 1); - устанавливает длину массива в 1 элемент, т.е.е элементов не два, а один. 2. Length(Mass) <> High(Mass). 3. Подсказка №1: должна ли быть ошибка в таком коде?
Подсказка №2: посмотрите, что делает опция Range Check Errors. |
| Автор: PsiMagistr 5.7.2010, 17:05 | ||
| Хм... Крайне любопытная штука этот лишний элемент... Добавлено @ 17:08
|
| Автор: RomanEEP 5.7.2010, 17:30 | ||||
Его нет, просто память по адресу Mass[2] указывает на другой участок памяти, который выделен под другую переменную. присваиваю Mass[2] ты запарываешь какую-то переменную. Результат - предсказуемый. Программа будет падать, может чаще, может реже - как повезет. Что бы этого отловить такую ситуацию как можно раньше следуй совету №2 от CodeMonkey!
Чтобы установить размерность 2 мерного массива неплохо бы для начала объявить массив как 2-мерный x: array of array of Integer Это же все равно что присваивать переменной-интеджеру значение-строку. |
| Автор: PsiMagistr 5.7.2010, 17:46 |
| RomanEEP, спс. Искал опцию Range Check. Естественно там False стояло. Жесть... Это ж такого можно натворить. Я в ауте просто. |
| Автор: CodeMonkey 5.7.2010, 18:36 |
| http://www.gunsmoker.ru/2009/04/delphi_19.html. |
| Автор: PsiMagistr 5.7.2010, 18:53 |
| CodeMonkey, Благодарю, читаю. |
| Автор: graffi 8.7.2010, 11:41 | ||
это _иногда_ бывает нужно. но вот почему по умолчанию она в false - не знаю. |
| Автор: PsiMagistr 8.7.2010, 11:59 |
| В Дельфи 2009 точно false. Может потому, что если компилировать с этой опцией - прога немного тяжелее по весу выходит. (так в справке сказано) |
| Автор: CodeMonkey 8.7.2010, 12:35 | ||
Там вопрос не столько в доп. весе кода, сколько в скорости. Представьте такой цикл:
Весьма типичных код в некоторых сферах Впрочем, если ваша программа не делает каких-то чувствительных к скорости манипуляций с массивами - ставьте опцию в True всегда. Можете сделать это для дефолтного проекта (закройте все файлы, Project/Options, галочку поставьте и всё закройте по Ok - теперь каждый новый проект будет иметь эту опцию). |
| Автор: PsiMagistr 13.7.2010, 08:28 |
| CodeMonkey, Благодарю. |