Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

"Invalid pointer operation" при закрытии. [D7, Win2k]


Страницы:   1 2

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]

А еще какие поинтеры используешь?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо