![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Traum |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 30.1.2004 Репутация: нет Всего: нет |
Суть проблемы:
Есть таблица StringGrid. В ней пользователь задает число строк и вводит числа real (должны быть не равными нулю). Создается динамический массив для введенных данных. Далее проверяется не равен ли нулю хоть один. Если равен нулю хоть одно значение то обнуление динам. массива (:=nil) и прерывание процедуры с помощью exit. Если пользователь несколько раз будет ошибаться то периодически (причем не всегда) начнет появляться ошибка "Invalid pointer operation" В чем проблема? |
|||
|
||||
| Serggggg |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 12.12.2003 Где: Донецк, Украина Репутация: нет Всего: нет |
Не совсем понятно.
Если пользователь ошибся один раз из N возможных, то автоматом затирается весь массив? И потом, если пользователь ошибается во второй раз, то массив снова стирается? Может, я не совсем въехал в суть метода, но, по-моему, во второй раз уже происходит попытка затирания пустой области памяти. Поэтому pointer может и обругать. Но не совсем уверен, что проблемма именно в этом. Приведи код, если не сложно. С уважением, Serggggg --------------------
C уважением, Serggggg. |
|||
|
||||
| <Spawn> |
|
|||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: 44 Всего: 64 |
Traum код в студию.
-------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
|||
|
||||
| Гость_Traum |
|
|||
|
Unregistered |
Вот упрощенно:
procedure TForm_Daten.Button1Click(Sender: TObject); begin //создаем массив (n- получено от пользователя) SetLength(L,n); //считываем данные For i:=0 to n-1 do try L:=StrToFloat(Tabl.Cells[1,i+1]);except L:=nil; exit;end; [I]//проверяем на допустимость For i:=0 to n-1 do if L[i]<L_min then begin L:=nil; exit; end; end; Ну там еще вводятся другие данные (обычные) (прием и обработка анологично как для L) Если несколько раз вводить не то что надо то почемуто возникает (причем периодически) выше указанная ошибка. |
|||
|
||||
| Петрович |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1000 Регистрация: 2.12.2003 Где: Москва Репутация: 25 Всего: 55 |
Ошибка в
А точнее в L:=StrToFloat(Tabl.Cells[1,i+1]); Присваивание наверное надо делать не всему массиву, а лишь текущему элементу:
Странно, но мне кажется что ошибка должна возникать не иногда, а всегда! Либо, когда она не возникает, то во втором цикле ты работаешь не с введенными данными, а с лабудой. -------------------- Все знать невозможно, но хочется |
||||
|
|||||
| Traum |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 30.1.2004 Репутация: нет Всего: нет |
Петрович
Я тоже был удивлен когда сначала возникала ошибка а при последующих двух нажатиях ее нет (а потом снова ...) Переписал заново большой блок программы с тестированием после добавления каждой строки и вроде бы ничего не изменял, а ошибка исчезла (вроде бы). Единственное подозрение: в одном месте старой версии сравнивал k1>k2, где k1 - double, а k2 - const. |
|||
|
||||
![]()
|
| Правила форума "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. |