powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / FreeAndNil Dataset
47 сообщений из 47, показаны все 2 страниц
FreeAndNil Dataset
    #39988254
Фотография wsnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день не могу понять, есть код:
Код: pascal
1.
2.
if Assigned(DM.datasource1.dataset) then FreeAndNil(DM.datasource1.dataset) // ошибка 
DM.datasource1.dataset := unit1.getDataSet;


Но освободить не могу FreeAndNil выдаёт ошибку, динамические элементы не даёт освободить, как все же удалить с помощью FreeAndNil ? Через Free работает.
...
Рейтинг: 0 / 0
FreeAndNil Dataset
    #39988261
x1ca4064
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wsnet
Добрый день не могу понять, есть код:
Код: pascal
1.
2.
if Assigned(DM.datasource1.dataset) then FreeAndNil(DM.datasource1.dataset) // ошибка 
DM.datasource1.dataset := unit1.getDataSet;


Но освободить не могу FreeAndNil выдаёт ошибку, динамические элементы не даёт освободить, как все же удалить с помощью FreeAndNil ? Через Free работает.


Вы читали текст ошибки? Смотрели, какие аргументы у FreeAndNil?
Почему хотите применить именно FreeAndNil?
...
Рейтинг: 0 / 0
FreeAndNil Dataset
    #39988270
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wsnetкак все же удалить с помощью FreeAndNil ?

Никак. FreeAndNil - для переменных. А DM.datasource1.dataset - свойство. Назад за парту,
читать букварь.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
FreeAndNil Dataset
    #39988341
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это, видимо, под впечатлением от прочитанного в Курилке.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
FreeAndNil Dataset
    #39988351
Фотография Victor Cookin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wsnet,

На

Код: pascal
1.
FreeAndNil(DM.datasource1.dataset);



Компилятор ругается
Код: sql
1.
 [dcc32 Error] : E2197 Constant object cannot be passed as var parameter


Так же он будет ругаться и на
Код: pascal
1.
2.
3.
4.
5.
6.
var a : string;
const b = 'bbb'; c = 'ccc';
begin
  a := b;
  FreeAndNil (b);
  a := c;


И по той же причине

Если
Код: pascal
1.
DM.datasource1.dataset 

больше Вам не треба, то сделайте хотя бы Close перед тем как его Free.
...
Рейтинг: 0 / 0
FreeAndNil Dataset
    #39988358
Victor Cookin,

У тебя Delphi 10.4

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
procedure FreeAndNil(const [ref] Obj: TObject);
var
  Temp: TObject;
begin
  Temp := Obj;
  TObject(Pointer(@Obj)^) := nil;
  Temp.Free;
end;



В старых такого ещё нету.
...
Рейтинг: 0 / 0
FreeAndNil Dataset
    #39988359
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам
Это, видимо, под впечатлением от прочитанного в Курилке.
это братья по разуму
...
Рейтинг: 0 / 0
FreeAndNil Dataset
    #39988376
Фотография Victor Cookin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВсеРазумный
Victor Cookin,

У тебя Delphi 10.4



У меня Delphi 10.0 Seattle. А в старых что?
...
Рейтинг: 0 / 0
FreeAndNil Dataset
    #39988379
Victor Cookin,

Может обновления тебе прилетели.

В старых
Код: pascal
1.
procedure FreeAndNil(var Obj);



Суй всё, что хочешь
...
Рейтинг: 0 / 0
FreeAndNil Dataset
    #39988404
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВсеРазумный
Суй всё, что хочешь

Ага, щаз он тебе даст в var запихнуть свойство, которое ещё и рид-онли небось.
...
Рейтинг: 0 / 0
FreeAndNil Dataset
    #39988412
alekcvp,

Это не означает что в такой var нельзя пихать строки, интерфейся и всё остальное.

И быть анальным гением.
...
Рейтинг: 0 / 0
FreeAndNil Dataset
    #39988449
Фотография Victor Cookin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВсеРазумный, у меня в 10.0:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
procedure FreeAndNil(var Obj);
{$IF not Defined(AUTOREFCOUNT)}
var
  Temp: TObject;
begin
  Temp := TObject(Obj);
  Pointer(Obj) := nil;
  Temp.Free;
end;
{$ELSE}
begin
  TObject(Obj) := nil;
end;
{$ENDIF}
...
Рейтинг: 0 / 0
FreeAndNil Dataset
    #39988450
Фотография Victor Cookin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а ругается, т.к. сую ему константу, а не переменную.
Если сунуть строку, будет AV
...
Рейтинг: 0 / 0
FreeAndNil Dataset
    #39988451
Victor Cookin,

В новой версии
[dcc32 Error] Unit2.pas(29): E2010 Incompatible types: 'TObject' and 'string'
...
Рейтинг: 0 / 0
FreeAndNil Dataset
    #39988452
Victor Cookin,

Старая раздвинула булки, и впустила в себя
...
Рейтинг: 0 / 0
FreeAndNil Dataset
    #39988715
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а если скастовать строку к TObject, как будет ругаться? :)

зы. поставил-таки винду десятку, неохота мусорить в реестре установкой дельфей для проверки, а выложенные на руборде портабельные сборки работают только под семерку :(
...
Рейтинг: 0 / 0
FreeAndNil Dataset
    #39988718
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док
а если скастовать строку к TObject, как будет ругаться? :)
AV будет.

Иногда делаю так PInteger(nil)^, когда необязательный параметр функции объявлен как var
...
Рейтинг: 0 / 0
FreeAndNil Dataset
    #39988719
Фотография Victor Cookin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док,

а всё так и так будет скастоваться к ТObject, строка тоже. Так что то же самое AV на str.Destroy
...
Рейтинг: 0 / 0
FreeAndNil Dataset
    #39988721
Док,

Что, ручки уже тянуться запихнуть не впехуемое ? Какие шаловливые.
...
Рейтинг: 0 / 0
FreeAndNil Dataset
    #39988723
Фотография Victor Cookin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А FreeAndNil (Dataset) совершенно нормально проходит и в 10.0 и в 10.4.
А вот интересно, Close надо делать или оно само случится?
...
Рейтинг: 0 / 0
FreeAndNil Dataset
    #39988769
x1ca4064
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victor Cookin

А вот интересно, Close надо делать или оно само случится?


Посмотрите исходник TDataset.Destroy: там есть вызов Close
...
Рейтинг: 0 / 0
FreeAndNil Dataset
    #39988814
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВсеРазумный
Что, ручки уже тянуться запихнуть не впехуемое ? Какие шаловливые.

скорее, голова любознательная. Иногда проще сделать и посмотреть на результат, чем теорией заниматься :)
...
Рейтинг: 0 / 0
FreeAndNil Dataset
    #39988815
Док,

Скушает так

Код: pascal
1.
 FreeAndNil(TObject(ValueString));



Всё кушает, что состоит в иерархии TObject
...
Рейтинг: 0 / 0
FreeAndNil Dataset
    #40031474
Mechanic17
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос по FreeAndNil. Решил не плодить тем.
Есть процедура
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
 [code=pascal]
procedure TForm1.Button7Click(Sender: TObject);
var
  OtvJSAr, OtvJSArNotDuble: TJSonArray;
begin
  OtvJSAr := TJSonArray.Create;
  OtvJSArNotDuble := TJSonArray.Create;
 try
  ...
 finally
  FreeAndNil (OtvJSAr);
  ShowMessage ('конец2');  // для отладки, чтобы понять какая строка дает ошибку
  FreeAndNil (OtvJSArNotDuble);
  end;

end;



Компиляция проходит без ошибок. НО при выполнении на последней строке FreeAndNil (OtvJSArNotDuble); выдает ошибку "Access violation at address 006xxxxx in module AAA.exe. Read of address 00000008" .
Причем если строки FreeAndNil (OtvJSAr); и FreeAndNil (OtvJSArNotDuble); поменять местами то ошибка остается на второй строке.

В чем проблема?
...
Рейтинг: 0 / 0
FreeAndNil Dataset
    #40031476
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Mechanic17
Вопрос по FreeAndNil. Есть процедура
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
 [code=pascal]
procedure TForm1.Button7Click(Sender: TObject);
var
  OtvJSAr, OtvJSArNotDuble: TJSonArray;
begin
  OtvJSAr := TJSonArray.Create;
  OtvJSArNotDuble := TJSonArray.Create;
 try
  ...
 finally
  FreeAndNil (OtvJSAr);
  ShowMessage ('конец2');  // для отладки, чтобы понять какая строка дает ошибку
  FreeAndNil (OtvJSArNotDuble);
  end;

end;



Компиляция проходит без ошибок. НО при выполнении на последней строке FreeAndNil (OtvJSArNotDuble); выдает ошибку "Access violation. Read address 000008" .
Причем если строки FreeAndNil (OtvJSAr); и FreeAndNil (OtvJSArNotDuble); поменять местами то ошибка остается на второй строке.

В чем проблема?

у тебя где-то что-то уже умерло, но ты продолжаешь обращаться по несуществующему адресу

обычно то, что внутри твоего
try
...
finally

гораздо интереснее посмотреть
...
Рейтинг: 0 / 0
FreeAndNil Dataset
    #40031478
Mechanic17
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
defecator,

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
procedure TForm1.Button7Click(Sender: TObject);   
var
  OtvJSAr, OtvJSArNotDuble: TJSonArray;
begin
  OtvJSAr := TJSonArray.Create;
  OtvJSArNotDuble := TJSonArray.Create;
 try
  OtvJSAr := TJsonObject.ParseJSONValue(mmo2.text) as TJsonArray;
     if Assigned (OtvJSAr) then begin
          edt6.Text := inttostr(OtvJSAr.Count);
     end
     else  ShowMessage ('не понял структуру данных');

     mmo2.Lines.Clear;
     OtvJSArNotDuble.Add (OtvJSAr.items[0] as TJSONObject);
     mmo2.Lines.Add (OtvJSArNotDuble.Format(2));

 finally

  FreeAndNil (OtvJSAr);
  ShowMessage ('конец2');      // для отладки
  FreeAndNil (OtvJSArNotDuble);
  ShowMessage ('конец3');      // для отладки
 end;
end;



На строке FreeAndNil (OtvJSArNotDuble); выскакивает ошибка и сообщения ShowMessage ('конец3'); я уже не получаю.
Работаю на Delphi 10.3
...
Рейтинг: 0 / 0
FreeAndNil Dataset
    #40031484
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Mechanic17
defecator,

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
procedure TForm1.Button7Click(Sender: TObject);   
var
  OtvJSAr, OtvJSArNotDuble: TJSonArray;
begin
  OtvJSAr := TJSonArray.Create;
  OtvJSArNotDuble := TJSonArray.Create;
 try
  OtvJSAr := TJsonObject.ParseJSONValue(mmo2.text) as TJsonArray;
     if Assigned (OtvJSAr) then begin
          edt6.Text := inttostr(OtvJSAr.Count);
     end
     else  ShowMessage ('не понял структуру данных');

     mmo2.Lines.Clear;
     OtvJSArNotDuble.Add (OtvJSAr.items[0] as TJSONObject);
     mmo2.Lines.Add (OtvJSArNotDuble.Format(2));

 finally

  FreeAndNil (OtvJSAr);
  ShowMessage ('конец2');      // для отладки
  FreeAndNil (OtvJSArNotDuble);
  ShowMessage ('конец3');      // для отладки
 end;
end;




На строке FreeAndNil (OtvJSArNotDuble); выскакивает ошибка и сообщения ShowMessage ('конец3'); я уже не получаю.
Работаю на Delphi 10.3

мнея в этом коде настораживает момент, когда ты получаешь ошибку - "не понял структуру данных",
но затем упорно что-то с этой неправильной структурой данных делаешь

в моём понимании должно быть примерно так:

Код: pascal
1.
2.
3.
4.
if Assigned (OtvJSAr) then begin
          edt6.Text := inttostr(OtvJSAr.Count);
     end
     else  begin ShowMessage ('не понял структуру данных'); Exit ; end;
...
Рейтинг: 0 / 0
FreeAndNil Dataset
    #40031487
Mechanic17
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
defecator,
тут вы правы. Но т.к. проблем в if нет (т.е. все хорошо парсится и дальше нужный элемент перекидывается из OtvJSA в OtvJSArNotDuble и выводится в Memo) то не проработал еще эту часть в else . Теперь устранил ваше замечание.

Кстати попробовал вариант. Ошибка осталась.
Код: pascal
1.
2.
3.
4.
5.
finally
  OtvJSAr.Free;
  ShowMessage ('конец2');
  OtvJSArNotDuble.Free;
  ShowMessage ('конец3');
...
Рейтинг: 0 / 0
FreeAndNil Dataset
    #40031488
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Mechanic17
defecator,
тут вы правы. Но т.к. проблем в if нет (т.е. все хорошо парсится и дальше нужный элемент перекидывается из OtvJSA в OtvJSArNotDuble и выводится в Memo) то не проработал еще эту часть в else .

Кстати попробовал вариант. Ошибка осталась.
Код: pascal
1.
2.
3.
4.
5.
finally
    OtvJSAr.Free;
  ShowMessage ('конец2');
      OtvJSArNotDuble.Free;
  ShowMessage ('конец3');



бред, ты уж прости
...
Рейтинг: 0 / 0
FreeAndNil Dataset
    #40031491
Mechanic17
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
defecator,
Понимаю, что бред. А как правильно не понимаю...

Код: pascal
1.
2.
3.
4.
5.
 finally
  FreeAndNil (OtvJSAr);
  ShowMessage ('конец2');
//  FreeAndNil (OtvJSArNotDuble);
  ShowMessage ('конец3');


Выполняется без ошибки...
...
Рейтинг: 0 / 0
FreeAndNil Dataset
    #40031492
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Mechanic17
defecator,
Понимаю, что бред. А как правильно не понимаю...

Код: pascal
1.
2.
3.
4.
5.
 finally
  FreeAndNil (OtvJSAr);
  ShowMessage ('конец2');
//  FreeAndNil (OtvJSArNotDuble);
  ShowMessage ('конец3');



Выполняется без ошибки...

а что там внутри try..finally ?
появилось что-то свеженького, или осталось, как и было ?
...
Рейтинг: 0 / 0
FreeAndNil Dataset
    #40031493
Mechanic17
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
defecator,

Только это
Код: pascal
1.
2.
3.
4.
else  begin
      ShowMessage ('не понял структуру данных');
      Exit ;
 end;
...
Рейтинг: 0 / 0
FreeAndNil Dataset
    #40031496
Mechanic17
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
defecator,
Если убрать строку
Код: pascal
1.
OtvJSArNotDuble.Add (OtvJSAr.items[0] as TJSONObject);

, то все хорошо завершается...
...
Рейтинг: 0 / 0
FreeAndNil Dataset
    #40031500
Mechanic17
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тут http://www.delphibasics.ru/FreeAndNil.php пишут:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
...
// И теперь освобождаем и обнуляем этот объект
  FreeAndNil(myList);

 // Мы можем сделать это безопасно дважды - она игнорирует нулевые объекты
  FreeAndNil(myList);
end;



Никакого исключения не произойдёт - второй FreeAndNil не ничего делает.

И это действительно так:
Код: pascal
1.
2.
3.
4.
5.
6.
 finally
  FreeAndNil (OtvJSArNotDuble);
   FreeAndNil (OtvJSArNotDuble);
  ShowMessage ('конец2');
  FreeAndNil (OtvJSAr);
  ShowMessage ('конец3');



FreeAndNil (OtvJSArNotDuble); FreeAndNil (OtvJSArNotDuble); - выполняется без проблем.
FreeAndNil (OtvJSAr); - ошибка.
...
Рейтинг: 0 / 0
FreeAndNil Dataset
    #40031501
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Mechanic17
defecator,
Если убрать строку
Код: pascal
1.
OtvJSArNotDuble.Add (OtvJSAr.items[0] as TJSONObject);


, то все хорошо завершается...
откуда она у тебя выполнилась, если произошёл Exit ?
ты что-то не договариваешь
...
Рейтинг: 0 / 0
FreeAndNil Dataset
    #40031503
Mechanic17
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
defecator,
проблем в if нет (т.е. все хорошо парсится и дальше нужный элемент перекидывается из OtvJSA в OtvJSArNotDuble и выводится в Memo)
В else не заходим!


mmo2.text НЕ пустой там уже ответ от сервера. Ведь это procedure TForm1.Button7Click - Button7 ;)
Но переменные OtvJSA и OtvJSArNotDuble существуют ТОЛЬКО в этой процедуре.
...
Рейтинг: 0 / 0
FreeAndNil Dataset
    #40031506
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Mechanic17
defecator,
проблем в if нет (т.е. все хорошо парсится и дальше нужный элемент перекидывается из OtvJSA в OtvJSArNotDuble и выводится в Memo)
В else не заходим!


mmo2.text НЕ пустой там уже ответ от сервера. Ведь это procedure TForm1.Button7Click - Button7 ;)

дебаг тоже не работает ?
...
Рейтинг: 0 / 0
FreeAndNil Dataset
    #40031510
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mechanic17
Если убрать строку
Код: pascal
1.
OtvJSArNotDuble.Add (OtvJSAr.items[0] as TJSONObject);


, то все хорошо завершается...

Потому что двойное удаление у тебя. Ты в массив добавляешь элемент, которым владеет другой массив.
...
Рейтинг: 0 / 0
FreeAndNil Dataset
    #40031511
Mechanic17
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
defecator,
моя голова не работает... Что я там должен увидеть/не увидеть?

В такой связке ошибки нет. Но почему она вообще появляется???
Код: pascal
1.
2.
3.
4.
5.
 finally
  FreeAndNil (OtvJSArNotDuble);
  OtvJSAr := TJSonArray.Create;
  ShowMessage ('конец2');
  FreeAndNil (OtvJSAr);
...
Рейтинг: 0 / 0
FreeAndNil Dataset
    #40031513
Mechanic17
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kazantsev Alexey
Mechanic17
Если убрать строку
Код: pascal
1.
OtvJSArNotDuble.Add (OtvJSAr.items[0] as TJSONObject);


, то все хорошо завершается...

Потому что двойное удаление у тебя. Ты в массив добавляешь элемент, которым владеет другой массив.


Да. И надеюсь, что этот элемент теперь существует в двух массивах, а не как указатель на элемент первого массива.
Тогда как нужно было скопировать этот элемент?
...
Рейтинг: 0 / 0
FreeAndNil Dataset
    #40031514
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mechanic17
Тогда как нужно было скопировать этот элемент?

Например, так:
Код: pascal
1.
arr2.AddElement(TJSONValue(arr1.Items[0].Clone));
...
Рейтинг: 0 / 0
FreeAndNil Dataset
    #40031535
Mechanic17
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kazantsev Alexey,
Спасибо.
Код: pascal
1.
OtvJSArNotDuble.Add (OtvJSAr.items[0].Clone as TJSONObject);


Ваша рекомендация снимает ошибку.

Но в чем был конфликт? Пусть даже OtvJSArNotDuble хранит лишь указатель на один из элементов OtvJSAr. И когда удалил OtvJSArNotDuble остальные элементы OtvJSAr ведь еще существуют.
...
Рейтинг: 0 / 0
FreeAndNil Dataset
    #40031542
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mechanic17,

JSONArray при удалении, удаляет содержащиеся в нём элементы. В твоём случае, два массива имеют ссылку на один и тот же объект. Соответственно, когда один из массивов удаляет объект по ссылке, второй массив ссылается на уже удалённый объект. При попытке удалить объект второй раз и возникает ошибка.
...
Рейтинг: 0 / 0
FreeAndNil Dataset
    #40031543
Фотография Dmitry Arefiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможно OtvJSArNotDuble был добавлен в OtvJSAr, и OtvJSAr владеет и уничтожает OtvJSArNotDuble при своем уничтожении.
...
Рейтинг: 0 / 0
FreeAndNil Dataset
    #40031544
Фотография Dmitry Arefiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не увидел вторую страницу :)
...
Рейтинг: 0 / 0
FreeAndNil Dataset
    #40031638
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
3.
OtvJSArNotDuble.Add (OtvJSAr.items[0] as TJSONObject);
FreeAndNil (OtvJSAr);
FreeAndNil (OtvJSArNotDuble);


Предположительно, FreeAndNil (OtvJSArNotDuble) уничтожает все внутренние итемы, которые были уже уничтожены предыдущей строкой
...
Рейтинг: 0 / 0
FreeAndNil Dataset
    #40031763
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mechanic17
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
procedure TForm1.Button7Click(Sender: TObject);   
var
  OtvJSAr, OtvJSArNotDuble: TJSonArray;
begin
  OtvJSAr := TJSonArray.Create;  // Создали объект
  OtvJSArNotDuble := TJSonArray.Create;
 try
  OtvJSAr := TJsonObject.ParseJSONValue(mmo2.text) as TJsonArray;  // переписали его новым объектом
     if Assigned (OtvJSAr) then begin
          edt6.Text := inttostr(OtvJSAr.Count);
     end
     else  ShowMessage ('не понял структуру данных');

     mmo2.Lines.Clear;
     OtvJSArNotDuble.Add (OtvJSAr.items[0] as TJSONObject);  // Теперь у объекта два владельца OtvJSAr.items[0] 
     mmo2.Lines.Add (OtvJSArNotDuble.Format(2));

 finally

  FreeAndNil (OtvJSAr);
  ShowMessage ('конец2');      // для отладки
  FreeAndNil (OtvJSArNotDuble);
  ShowMessage ('конец3');      // для отладки
 end;
end;

...
Рейтинг: 0 / 0
47 сообщений из 47, показаны все 2 страниц
Форумы / Delphi [игнор отключен] [закрыт для гостей] / FreeAndNil Dataset
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]