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