Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.06.14;
Скачать: [xml.tar.bz2];

Вниз

Finalize(); выдает ошибку...   Найти похожие ветки 

 
GEEK   (2005-05-29 20:32) [0]

Когда освобождаю массив tstring-ов выдаеться ошибка: invalid pointer operation.
Как быть?


 
Marser ©   (2005-05-29 20:35) [1]

http://delphimaster.net/view/1-1117376417/
Читай [6] про 17-ю строку.


 
GEEK   (2005-05-29 20:38) [2]

Удалено модератором


 
Marser ©   (2005-05-29 20:47) [3]

Чему равно RowCount?(возможно, больше десяти).
Почему to SG.RowCount-2 ?

Сдаётся, у тебя просто выход за пределы динамического массива.


 
Alexander Panov ©   (2005-05-29 20:50) [4]

GEEK   (29.05.05 20:38) [2]
:=TStringList.Create;


Где Free?


 
Marser ©   (2005-05-29 20:51) [5]


> Где Free?

Это не причина ошибки...


 
GEEK   (2005-05-29 20:54) [6]


> Чему равно RowCount?(возможно, больше десяти).
> Почему to SG.RowCount-2 ?
>
> Сдаётся, у тебя просто выход за пределы динамического массива.

Сабж: Finalize() выдает ошибку
В цикле все нормально...
Еще при закрытии программы ошибка, но только если выполнялся код, который удалии (пасибо большое)...


 
Alexander Panov ©   (2005-05-29 20:54) [7]

Marser ©   (29.05.05 20:51) [5]
Это не причина ошибки...


Что происходит при Finalize(arr)?

Думаю, что ответ позволит решить основную проблему.


 
GEEK   (2005-05-29 20:55) [8]


> Где Free?


for i:=0 to High(arr) do arr[i].free;
Finalize(arr);
так тоже не катит


 
GEEK   (2005-05-29 20:56) [9]


> Что происходит при Finalize(arr)?

Освобождаеться массив... Не?


 
Alexander Panov ©   (2005-05-29 20:57) [10]

GEEK   (29.05.05 20:56) [9]
Освобождаеться массив... Не?


Если не углуюляться в дебри, то да.
Но куда деваются элементы массива - TStrings?


 
Marser ©   (2005-05-29 20:58) [11]

Finalize + F1
Finalize simply sets all long strings to empty and all variants and interfaces to Unassigned, thus properly releasing any memory that was referenced by the long strings and variants.

If the variable specified in a call to Finalize contains no long strings, variants, or interfaces, the compiler eliminates the call and generates no code for it.


 
GEEK   (2005-05-29 20:59) [12]

for i:=0 to High(arr) do arr[i].free;
Finalize(arr);

Теперь освобождаються все стринги, а потом освобождаеться массив...
Все равно ошибка...
Даже так:

for i:=0 to High(arr) do arr[i].destroy;
Finalize(arr);


 
Alexander Panov ©   (2005-05-29 21:00) [13]

GEEK   (29.05.05 20:55) [8]

В основном коде у тебя не все элементы массива проинициализированы, а уничтожить ты пытаешься все.

1. Вместо Finalize используй SetLength(arr,0).
2. Внимательно следи за создаваемыми и уничтожаемыми объектами.


 
GEEK   (2005-05-29 21:01) [14]


> Finalize + F1

В любом случае, если ничего не делать с массивом, при выходе программа виснет...


 
Alexander Panov ©   (2005-05-29 21:03) [15]

GEEK   (29.05.05 21:01) [14]
Finalize не уничтожает объекты, на которые ссылаются элементы массива.
В справке написано, для каких типов это верно.


 
Alexander Panov ©   (2005-05-29 21:05) [16]

Просто проверь такой код:
var
 arr: array of TStrings;
 i: integer;
begin
 SetLength(arr,10);
 for i := Low(arr) to High(arr) do
 begin
   arr[i] := TStringList.Create;
   arr[i].Add("dsfgdfg");
 end;
 for i := Low(arr) to High(arr) do
 begin
   arr[i].Free;
 end;
 SetLength(arr,0); // здесь можно уже и Finalize выполнить.


 
GEEK   (2005-05-29 21:07) [17]

Вощем все правы, ошибка вот она:
SetLength(arr,SG.RowCount-2);
for i:=0 to SG.RowCount-2 do arr[i]:=TStringList.Create;
А надо 3.
Пасибо всем...


 
GEEK   (2005-05-29 21:08) [18]

А Finalize или  SetLength(arr,0) можно не ставить ваще нигде!


 
Marser ©   (2005-05-29 21:11) [19]


>Вощем все правы, ошибка вот она:
>SetLength(arr,SG.RowCount-2);
> for i:=0 to SG.RowCount-2 do
>arr[i]:=TStringList.Create;
> А надо 3.

Тиць, п..ць, любий Гриць!
Почему так?


 
DiamondShark ©   (2005-05-29 22:15) [20]


> Почему так?

Потому что у программиста в километре 1024 метра.


 
Palladin ©   (2005-05-29 22:51) [21]


> GEEK   (29.05.05 21:07) [17]

Чушь. Надо не 3, а 4. В некоторых случаях, неопределенных наукой, 5. Их нужно искать по собственному опыту. Кстати каждый кратный числу 17 номер дня относительно начала года нужно 8.


 
Alexander Panov ©   (2005-05-29 23:03) [22]

>GEEK
мда... тебе шашечки или ехать?



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2005.06.14;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.042 c
3-1115275908
sergg
2005-05-05 10:51
2005.06.14
Установка фильтра в TADOTable


1-1117026254
balamutik
2005-05-25 17:04
2005.06.14
проблемы с dll


10-1094377969
Ragazor
2004-09-05 13:52
2005.06.14
Excel var iable convert. trouble


1-1117003467
seg
2005-05-25 10:44
2005.06.14
Как сделать, чтобы компоненты растягивались


3-1115205048
seregka
2005-05-04 15:10
2005.06.14
добавление записей в серверную базу MySQL





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский