Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Invalid pointer operation - почему??? Периодически возникает ошибка 
:(
    Опции темы
Traum
Дата 30.1.2004, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 30.1.2004

Репутация: нет
Всего: нет



Суть проблемы:
Есть таблица StringGrid. В ней пользователь задает число строк и вводит числа real (должны быть не равными нулю). Создается динамический массив для введенных данных. Далее проверяется не равен ли нулю хоть один. Если равен нулю хоть одно значение то обнуление динам. массива (:=nil) и прерывание процедуры с помощью exit. Если пользователь несколько раз будет ошибаться то периодически (причем не всегда) начнет появляться ошибка "Invalid pointer operation" В чем проблема?
PM MAIL   Вверх
Serggggg
Дата 30.1.2004, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 136
Регистрация: 12.12.2003
Где: Донецк, Украина

Репутация: нет
Всего: нет



Не совсем понятно.
Если пользователь ошибся один раз из N возможных, то автоматом затирается весь массив? И потом, если пользователь ошибается во второй раз, то массив снова стирается?
Может, я не совсем въехал в суть метода, но, по-моему, во второй раз уже происходит попытка затирания пустой области памяти. Поэтому pointer может и обругать. Но не совсем уверен, что проблемма именно в этом.
Приведи код, если не сложно.

С уважением, Serggggg
--------------------
C уважением, Serggggg.
PM MAIL ICQ   Вверх
<Spawn>
Дата 30.1.2004, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



Traum код в студию.


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Гость_Traum
Дата 30.1.2004, 18:46 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


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)
Если несколько раз вводить не то что надо то почемуто возникает (причем периодически) выше указанная ошибка.
  Вверх
Петрович
Дата 30.1.2004, 22:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 25
Всего: 55



Ошибка в
Код
try L:=StrToFloat(Tabl.Cells[1,i+1]);except L:=nil; exit;end;

А точнее в L:=StrToFloat(Tabl.Cells[1,i+1]);
Присваивание наверное надо делать не всему массиву, а лишь текущему элементу:
Код
try L[i]:=StrToFloat(Tabl.Cells[1,i+1]);except L:=nil; exit;end;

Странно, но мне кажется что ошибка должна возникать не иногда, а всегда!
Либо, когда она не возникает, то во втором цикле ты работаешь не с введенными данными, а с лабудой.



--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
Traum
Дата 31.1.2004, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 30.1.2004

Репутация: нет
Всего: нет



Петрович
Я тоже был удивлен когда сначала возникала ошибка а при последующих двух нажатиях ее нет (а потом снова ...)

Переписал заново большой блок программы с тестированием после добавления каждой строки и вроде бы ничего не изменял, а ошибка исчезла (вроде бы). Единственное подозрение: в одном месте старой версии сравнивал k1>k2, где k1 - double, а k2 - const.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0426 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.