Closed edsontmarques closed 10 months ago
Verifica a função GetJson, no seu exemplo o compilador vai liberar a o JSONObject automaticamente, por isso dá erro quando tenta destruir o objeto
Obrigado pela resposta. Vou verificar... Mas é como expliquei: Se comentarmos as chamadas de LoadStructure e LoadFromJSON, a liberação de memória ocorre normalmente quando a execução chega em JSONObject.Free. Pelo comportamento parece que há alguma interferência do Dataset-Serialize... "parece"... Se alguma estrutura deste código do exemplo estiver assumindo desalocação o JSONObject, mesmo assim, parece que há algum problema nessa tentativa, porque está ocorrendo memory leak. Eu fiz o teste... tentei apenas comentar o comando JSONObject.Free, justamente considerando que alguém estivesse fazendo a desalocação no meio do caminho. Mas percebi que, comentando o JSONObject.Free, ocorre memory leak.
Se olhar o código fonte dos métodos, ou até mesmo no Ctrl+barra de espaço, vai ver a documentação feita em XML Doc
Existe o parâmetro para você informar quem é o dono do JSON. No caso por padrão o dono é o DataSet-Serialize. Ou seja, ele mesmo destroi o JSON passado como parâmetro. Sendo assim, quando você tenta destruir o JSON depois, vai dar o Access violation, porque ele já foi destruído.
O mesmo acontece no LoadFromJSON:
Desculpa a demora em responder...
Detectei um erro de violação de acesso de memória ao dar Free em um TJSONObject na seguinte situação:
Tanto LoadStructure() como LoadFromJSON() podem provocar a violação de acesso. Basta comentar qualquer uma das duas que o JSONObject.Free funciona normalmente.
Infelizmente não tive condições de aprofundar mais para entender a causa.