![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
"Invalid pointer operation" при закрытии. [D7, Win2k]
VitGun © (2004-11-19 19:30:00)Проблема вот в чем. При закрытии программы вываливается сообщение "Invalid pointer operation".
В программе есть динамический массив. Если не задавать ему длину и не создавать его элементы, то прога
закрывается нармально, но если создать, то "Invalid pointer operation". В собыии OnClose главной формы написал
cap:=nil
где:
cap:array of real;
Прочитал в одной статье, что так массивы уничтожаються (aka Dispose для указателей в Pascal), но нифига не
помогает...что я не сделал? Где руки выпрямлять?
VitGun (2004-11-19 21:07:00) [1]2 Anatoly Podgoretsky:
[14] пост не видел - сорри.
2 Palladin.
Да понял я в чем моя ошибка. Я то был уверен, что обращаюсь к верному кол-ву элементов массива, т.е ошибка была именно в цикле.
len - есть кол-во записей в ValueListEditor. Я брал
len=ValueListEditor.RowCount-1.
Palladin (2004-11-19 20:59:00) [2]
> [16] VitGun © (19.11.04 20:47)
ты может быть сначала вникнешь прежде чем сопротивляться... не веди себя как ламер...
Anatoly Podgoretsky (2004-11-19 20:58:00) [3]begin...end © (19.11.04 20:45) [15]
Ну это способ писать без ошибок, особенно если к ней добавить еще и Low
Anatoly Podgoretsky (2004-11-19 20:56:00) [4]VitGun © (19.11.04 20:47) [16]
Ой не надо отпираться от горячего, ты бы уж не проводил свой код, а теперь краснеть надо за продолжающее развешивание лапшию
Кроме того ты выполнил домашнее задание в 14, сколько у тебя получилось?
VitGun (2004-11-19 20:53:00) [5]Блин...работает...
2 begin...end & Anatoly Podgoretsky - respect. Спасибо за помощь!
GLFox (2004-11-19 20:51:00) [6]
for i:=0 to len do
begin
cap[i]:=something;
end;
Данный код не может быть верным! Индексы в динамических массивах начинаются с НУЛЯ и заканчиваются на Length(YourArray)-1.
VitGun (2004-11-19 20:51:00) [7]Хм...
Полтергейтс однако... len - 1не помогло, а вот len-2помогло.
begin...end (2004-11-19 20:48:00) [8]
> [16] VitGun © (19.11.04 20:47)
Какой недоверчивый, какая разница - во время выполнения или при закрытии, программа просто злопамятная, вот и ругается только в конце.
VitGun (2004-11-19 20:47:00) [9]2 Anatoly Podgoretsky
Уж извините..нет. За пределы массива я не выпадаю. Сие мне известно и контроль включен. Ошибка появляется при ЗАКРЫТИИпрограммы, а не во время выполнения.
begin...end (2004-11-19 20:45:00) [10]
> [13] Anatoly Podgoretsky © (19.11.04 20:43)
Ну это само собой, а также, ИМХО, лучше пользоваться в таких случаях не конкретной переменной, а High(cap).
Anatoly Podgoretsky (2004-11-19 20:45:00) [11]Сделай для начала так
SetLength(,2) затем на бумажке пишешь, вручную прокручивая цикл
I = ?
..
I = ?
и считаешь количество строк, затем сравниваешь с количеством строк массиса
Anatoly Podgoretsky (2004-11-19 20:43:00) [12]begin...end © (19.11.04 20:40) [11]
Ну сдесь исправит, так в другом месте вылезет, надо не заплатки, а как минимум включить контроль за границами.
Anatoly Podgoretsky (2004-11-19 20:41:00) [13]VitGun © (19.11.04 20:22) [8]
Да, да именно так, ошибка при работе с динамическими массивами, вот теперь когда способился привести хоть чуть кода, то это уже стало не предположением, а истиной. Ты выходишь за пределы массива, а контроль за этим явно отключил.
Для начала срочно в настройки компилятор, проштудировать их и до тех пор ни строчки кода или же пиши без ошибок.
begin...end (2004-11-19 20:40:00) [14]
> [10] VitGun © (19.11.04 20:39)
Ну вот видишь, как всё просто оказалось, всего-то надо заменить lenна len - 1(в заголовке цикла).
VitGun (2004-11-19 20:39:00) [15]2 DrPass.
...
Setlength(cap,len);
...
где len - некоторая переменная типа integer
...
for i:=0 to len do
begin
cap[i]:=something;
end;
...
DrPass (2004-11-19 20:27:00) [16]
> Если динаические массивы не использовать,
Второй наводящий вопрос: а какты их используешь?
VitGun (2004-11-19 20:22:00) [17]2 Anatoly Podgoretsky. Угу. Я догадался...вопрос в другом...где?
Если динаические массивы не использовать, то все ОК, если использовать - то трабл.
Anatoly Podgoretsky (2004-11-19 20:20:00) [18]У тебя ошибка в программе.
VitGun (2004-11-19 20:19:00) [19]Никаких...в том то и дело. Это единственный DynamicArray во всей проге...
GLFox (2004-11-19 20:12:00) [20]А еще какие поинтеры используешь?