Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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
4-1098253544
Koala
2004-10-20 10:25
2004.12.05
Вопрос по передачи файла с помощью модема


3-1100014825
Hitman
2004-11-09 18:40
2004.12.05
Database not assigned


3-1099897472
karat
2004-11-08 10:04
2004.12.05
Про работу SQL серверов и возвращаемый набор данных.


1-1101110443
AleX200411
2004-11-22 11:00
2004.12.05
Сравнение объектов


3-1099734467
гость
2004-11-06 12:47
2004.12.05
interbase





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский