Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Invalid Pointer Operation


darth_ivan

Pergunta

15 respostass a esta questão

Posts Recomendados

  • 0
Result := False;

  v_Form := a_Arg.GetRAW(a_RawTagName);

  if Assigned(v_Form) then
  begin
    blu := Tblu.Create(nil);

    try
      TagToForm;

      if ShowModalDock(blu, f_Main) = mrOk then
        FormToTag;

    finally
      blu.Free;
    end;
  end;

Editado por Micheus
Adicionada a tag CODE para melhor visualização do código. Use-a também. ;-)
Link para o comentário
Compartilhar em outros sites

  • 0
De acordo com o Help do Delphi

Use Release to destroy the form and free its associated memory.

Use Release para destruir o Form e liberar a memoria associada

try
TagToForm;

if ShowModalDock(blu, f_Main) = mrOk then
FormToTag;

finally
blu.Release;
end;

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
Pelo debug o erro acontece na seguinte função: TObject.FreeInstance

Experimente de outra forma

try
      if Form2 = Nil then
         Form2 := TForm2.Create(self);
   except
       ShowMessage('Erro na criação do formulário !!');
       exit;
   end;

   Form2 .showmodal;

   Form2.Release;

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
Result := False;
  v_Form := a_Arg.GetRAW(a_RawTagName);

  if Assigned(v_Form) then
  begin
    blu := Tblu.Create(nil);
    try
      TagToForm;

      if ShowModalDock(blu, f_Main) = mrOk then
        FormToTag;

    finally
      blu.Free;
    end;
  end;

darth_ivan, por acaso o erro está ocorrendo neste "blu.Free"? Se sim, por acaso você escreveu o evento OnClose marcando o parâmetro Action := caFree;? Se for, poderia estar ai o problema.

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Opa

O que é este ShowModalDock?

Voce passa como parametro o form criado e o form principal, não sei bem o que ele faz com os parametros...

porem, na criacao do form voce não passa um owner pra ele e no ShowModalDock voce passa o form principal...

Digo porque o Owner é o responsável por destruir tal elemento quando necessario, ou quando ele é destruido...

Enfim como não da pra saber exatamente o que esse ShowModalDock faz, talvez não tenha haver...

abrs

Link para o comentário
Compartilhar em outros sites

  • 0
Pelo debug o erro acontece na seguinte função: TObject.FreeInstance
darth_ivan, este método é chamado na destruição de qualquer classe. Na verdade, durante a depuração, seria interessante que você pusesse um break-point no begin inícial desta procedure para que ao chegar a ela, você possa acessar a janela Call Stack e verificar os procedimentos anteriormente chamados. Assim, ao ocorrer o erro, você saberia com mais segurança, que procedimento está tentando utilizar este ponteiro inválido.

mas, observando seus posts iniciais e a não solução pela abordagem do form, vamos explorar outras situações, pois podemos ter nos desviado do real causador do problema já que "Invalid pointer operation" se refere a operações com ponteiros e parece que você faz mais uso deles do que apenas no blu.free.

Primeiramente seria interessante que você conseguisse apontar em que linha o erro ocorre, já que a execução do programa deve ser interrompida neste ponto ou muito próximo;

Depois, temos outras questões a avaliar, como:

- a_Arg, pode em algum momento ser um endereço de memória inválido? Quando ele é iniciado e quando é finalizado?

- em que momento você insere algo nesta suposta lista (a_Arg) e em que momento você o remove? Como está removendo? Haveria a possibilidade de este item sendo buscado ter ficado na lista após sua eliminação?

- uma vez que é verificada sua validade, este v_Form é utilizado em algum momento no TagToForm, FormToTag ou no ShowModalDock?

- como está a codificação nestes procedimentos TagToForm e FormToTag?

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0
Ele estava em uma outra classe nada a ver com esse form em um upcast inválido. Esse delphi é maluco mesmo...
opa... demorei escrevento o post e agora vi que você já encontrou o problema. :blush:

No geral, quando uma exceção ocorre e o fluxo do programa é desviado para dentro do editor, você pode usar o F7 para avançar na execução apenas um passo e então, utilizar a janela Call Stack para saber que procedimentos foram executados até o erro (pilha das chamadas) e também fazer uso da janela Watch para visualizar valores das variáveis.

Abraços

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...