powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Почему при уничтожении TJSONObject получаю invalid pointer operation?
12 сообщений из 12, страница 1 из 1
Почему при уничтожении TJSONObject получаю invalid pointer operation?
    #39742839
Devillio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Подскажите, будьте добры? Мне нужно "вставлять" один JSON как значение в другом JSON.
Выполняется, результат верный, но при выполнении .Destroy одного из JSONObject вываливается invalid pointer operation.
А если убрать строчку с Destroy, то ReportMemoryLeaksOnShutdown репортит о небольших утечках.
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
var
  AJSON, AJSONFIAS: TJSONObject;
...
          try
                AJSON := TJSONObject.ParseJSONValue(S1) as TJSONObject;
                AJSONFIAS := TJSONObject.ParseJSONValue(S2) as TJSONObject;

                ((AJSON.Pairs[1].JsonValue as TJSONArray).Items[0] as TJSONObject).AddPair(TJSONPair.Create('FIASOBJ', (AJSONFIAS.Get(1).JsonValue as TJSONArray).Get(0)));
                Result := AJSON.ToString;

          finally
            AJSON.Destroy;
//            AJSONFIAS.Destroy; //вываливается если вернуть
          end;
            


Подскажите, что не так?
...
Рейтинг: 0 / 0
Почему при уничтожении TJSONObject получаю invalid pointer operation?
    #39742858
Фотография Dimonka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Devillio,

Destroy - это конечно стандартное название деструктора, но принято всё таки для уничтожения вызывать метод Free
...
Рейтинг: 0 / 0
Почему при уничтожении TJSONObject получаю invalid pointer operation?
    #39742865
Devillio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimonka, тот же результат
...
Рейтинг: 0 / 0
Почему при уничтожении TJSONObject получаю invalid pointer operation?
    #39742884
Devillio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Разбил на 2 строки:
Код: pascal
1.
2.
3.
//                AJSONPair := TJSONPair.Create('FIASOBJ', 'TESTTEST'); //вот так все работает без утечек и invalod'ов
                AJSONPair := TJSONPair.Create('FIASOBJ', (AJSONFIAS.Pairs[1].JsonValue as TJSONArray).Items[0]); //значит так делать нельзя
                ((AJSON.Pairs[1].JsonValue as TJSONArray).Items[0] as TJSONObject).AddPair(AJSONPair);


Так как подгрузить в Value другой JSON? :(

Например, есть такой: {red:180, green:180, blue:180}
И есть такой: { result: "1", data: [ {id: "1", name: "test"} ] }
мне надо так: { result: "1", data: [ {id: "1", name: "test", fiasobj: {red:180, green:180, blue:180}} ] }
Как такое сделать? :)
...
Рейтинг: 0 / 0
Почему при уничтожении TJSONObject получаю invalid pointer operation?
    #39742898
Devillio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может кому-то понадобится..
Чтобы сделать копию jsonvalue, надо пользовать метод Clone;
Код: pascal
1.
2.
                AJSONPair := TJSONPair.Create('FIASOBJ', (AJSONFIAS.Pairs[1].JsonValue as TJSONArray).Items[0].Clone as TJSONValue);
                ((AJSON.Pairs[1].JsonValue as TJSONArray).Items[0] as TJSONObject).AddPair(AJSONPair);


Никаких утечек, Destroy и Free без invalid
:)
...
Рейтинг: 0 / 0
Почему при уничтожении TJSONObject получаю invalid pointer operation?
    #39743139
Фотография krapotkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у стандартного JSON синтаксис просто ужасен
попробуйте XSuperObject
...
Рейтинг: 0 / 0
Почему при уничтожении TJSONObject получаю invalid pointer operation?
    #39743186
Фотография Dmitry Arefiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это делается короче в 10.3
Код: pascal
1.
AJSON.GetValue<TJSONObject>['<name>[0]'].AddPair('FIASOBJ', AJSONFIAS.P['<name>[0]'].Clone)
...
Рейтинг: 0 / 0
Почему при уничтожении TJSONObject получаю invalid pointer operation?
    #39826736
Lem0nti
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DevillioДобрый день!

Подскажите, будьте добры? Мне нужно "вставлять" один JSON как значение в другом JSON.
Выполняется, результат верный, но при выполнении .Destroy одного из JSONObject вываливается invalid pointer operation.
А если убрать строчку с Destroy, то ReportMemoryLeaksOnShutdown репортит о небольших утечках.
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
var
  AJSON, AJSONFIAS: TJSONObject;
...
          try
                AJSON := TJSONObject.ParseJSONValue(S1) as TJSONObject;
                AJSONFIAS := TJSONObject.ParseJSONValue(S2) as TJSONObject;

                ((AJSON.Pairs[1].JsonValue as TJSONArray).Items[0] as TJSONObject).AddPair(TJSONPair.Create('FIASOBJ', (AJSONFIAS.Get(1).JsonValue as TJSONArray).Get(0)));
                Result := AJSON.ToString;

          finally
            AJSON.Destroy;
//            AJSONFIAS.Destroy; //вываливается если вернуть
          end;
            


Подскажите, что не так?
После вызова AJSON.Destroy; AJSONFIAS уже уничтожен, потому как он "внутри" AJSON и был уничтожен при высвобождении дженериков внутри класса. Так что вызывать его лишний дестрой не надо. А по поводу утечек, попробуйте прогнать этот код тысячу раз подряд и следите за оперативой. Есть основания полагать, что учечки не будет, а те небольшие отъедания памяти будут одноразовыми, потому что связаны с какой-нибудь стартовой инициализацией модяля JSON.
...
Рейтинг: 0 / 0
Почему при уничтожении TJSONObject получаю invalid pointer operation?
    #39826739
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry Arefiev,

Короче, но все одно весьма коряво.
...
Рейтинг: 0 / 0
Почему при уничтожении TJSONObject получаю invalid pointer operation?
    #39826750
Фотография Dmitry Arefiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatКороче, но все одно весьма коряво.
Что там "весьма ..." ?
...
Рейтинг: 0 / 0
Почему при уничтожении TJSONObject получаю invalid pointer operation?
    #39826756
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry Arefiev,

Мне не нравяться использование генерика и addPair.

Нифига не интуитивно.
...
Рейтинг: 0 / 0
Почему при уничтожении TJSONObject получаю invalid pointer operation?
    #39826758
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя addPair - это больше вопрос привычки.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Почему при уничтожении TJSONObject получаю invalid pointer operation?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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