se o objecto foi eliminado utilizando o operador de eliminação.
O primeiro caso é meu.
Teria todo o prazer em utilizar CheckPointer() e outros métodos de verificação (não nasci de manhã), mas retirar a EA do gráfico não me dá qualquer hipótese.
Deixem-me esclarecer - se eu especificar no construtor que o ponteiro é igual a NULL e parar quaisquer acções com ele, o Expert Advisor receberá 281 e sairá (enquanto que de acordo com a minha ideia não deve).
Mas se chamar o Init ou InitXXX depois do construtor (semelhante ao CExpert), tudo funciona correctamente...
Teria todo o gosto em utilizar o CheckPointer() e outros métodos de verificação (nasci no mesmo dia), mas o crash do gráfico da EA não me dá a oportunidade de o fazer.
Deixem-me esclarecer - se eu especificar no construtor que o ponteiro é igual a NULL e quebrar todas as acções possíveis com ele, a EA receberá 281 e sairá (e de acordo com a minha ideia não deve).
Mas se chamar o Init ou InitXXX depois do construtor (semelhante ao CExpert), tudo funciona correctamente...
Se tivesse tratado de excepções, poderia facilmente descobrir qual era a questão e resolvê-la.
Teria todo o prazer em utilizar CheckPointer() e outros métodos de verificação (penso que não nasci ontem), mas o crashing EA do gráfico não me dá qualquer hipótese.
Deixem-me esclarecer - se eu especificar no construtor que o ponteiro é igual a NULL e parar quaisquer acções com ele, o Expert Advisor receberá 281 e sairá (enquanto que de acordo com a minha ideia não deve).
Se chamar o Init ou InitXXX depois do construtor (semelhante ao CExpert), tudo funciona como deve...
Ainda não lidei com os métodos Init ou InitXXX, mas eu interpretaria "EA sendo puxado para baixo" em si mesmo da seguinte forma: o programa em tempo de execução choca com o ponteiro incorrecto e este gargalo deve ser procurado no código. O meu construtor também inicializa um ponteiro para NULL, mas nada voa para fora.
Obrigado, agora tudo está no seu lugar. Mas, há uma questão adicional - Suponha que ocorre um erro 281, mas é desejável que a EA não seja descarregada. Como devemos lidar com isto?
Deixe-me esclarecer a minha pergunta: O que fazer se o erro 281 ocorrer após todas as etapas da inicialização, mas não afectará o trabalho principal do Expert Advisor de forma crítica o suficiente para não o executar de todo?
Não haverá tratamento de excepção.
Só há uma saída - não usar apontadores incorrectos.
Se houver uma possibilidade (diferente de zero) de que um ponteiro possa estar incorrecto, não se esqueça de o verificar antes de o utilizar.
Ainda não lidei com os métodos Init ou InitXXX, mas interpretaria "tirar a EA do gráfico" em si mesmo da seguinte forma: o programa durante a sua execução choca com um ponteiro incorrecto e é este estrangulamento no código que precisa de ser procurado. O meu construtor também inicializa um ponteiro para NULL, mas nada voa para fora.
Se entendi mal a pergunta, peço desculpa.
Se estiver a falar da classe CExpert, deve ligar pelo menos ao Init(....). Todos os apontadores lá são inicializados como apontadores para objectos de classes base...
uncleVic: Alternativa: Ter um código limpo e transparente que falha no ponteiro Inválido?
Alternativa: ter um código limpo e transparente.
No ponteiro Inválido e outras situações excepcionais (falha de energia, espaço em disco, etc. Situações EXCLUSIVAS) o programa vai para o bloco de tratamento de excepções, onde o respeitado Interessante (e eu também:) poderia imprimir valores e erros variáveis, analisar a situação e compreender qual é o problema. E, se não houver reacção ao que aconteceu neste bloco, desista.
Evidentemente, isto não invalida as verificações padrão e necessárias. Isto só é aplicável em SITUAÇÕES EXCEPCIONAIS.
uncleVic: Se for classe CExpert, deve chamar pelo menos Init(....). Todos os apontadores lá são inicializados como apontadores para objectos de classes base...
Por exemplo, se o Init ou InitXXX for executado com um erro (devolve falso), o que acontece então?
Ou o que fazer se durante a execução a EA ainda receber 281 (apesar de todas as verificações e truques), mas não houver nenhum comerciante por perto?
Não é uma boa ideia:
Se tivesse tratado de excepções, poderia facilmente descobrir o que estava errado e lidar com a situação.
Os controlos estão lá quase todos os passos, mas infelizmente o processamento não está lá...
PS
Então, sobre a saída da EA do gráfico - o que fazer para tornar a EA "viva" em qualquer iniciação?
uncleVic: Alternativa: Ter um código transparente limpo, a cair por um ponteiro Inválido?
Bem, esse é o ponto que voa, deixe-me eu próprio decidir neste caso se o perito deve ser puxado para baixo ou não.
Afinal, não estamos sequer a falar de um ponteiro "partido" ser aplicado algures, embora eu pessoalmente tenha uma verificação antes de o aplicar (embora eu possa implementar outra verificação no temporizador).
De alguma forma aprendi a viver em harmonia com os indicadores e não me importo muito com os resultados da iniciação, mas não posso fazer amigos com apontadores.
Yedelkin:
Ainda não lidei com os métodos Init ou InitXXX, mas interpretaria o "despejo EA" da seguinte forma: o programa em tempo de execução choca com um ponteiro incorrecto e este estrangulamento deve ser procurado no código. O meu construtor também inicializa um ponteiro para NULL, mas nada voa para fora.
Se compreendi mal a pergunta, peço desculpa.
Actualmente, a fim de resolver o problema, estou a regressar 0 no bloco de inicialização.
intOnInit()
{
//----------------------------------------------------------------------------////Processing process of the initialization//----------------------------------------------------------------------------//return(0);
//----------------------------------------------------------------------------//
}
Como entendi, é a melhor saída para mim (para que a EA não caia na inicialização). Ou seja, em qualquer caso, resultado OnInit = 0, não posso julgar quão correcto é.
"Invalid pointer access" =="Tentativa de acesso a um ponteiro inválido"? Se sim, então
Um ponteiro pode ser inválido nos seguintes casos:
O primeiro caso é meu.
Teria todo o prazer em utilizar CheckPointer() e outros métodos de verificação (não nasci de manhã), mas retirar a EA do gráfico não me dá qualquer hipótese.
Deixem-me esclarecer - se eu especificar no construtor que o ponteiro é igual a NULL e parar quaisquer acções com ele, o Expert Advisor receberá 281 e sairá (enquanto que de acordo com a minha ideia não deve).
Mas se chamar o Init ou InitXXX depois do construtor (semelhante ao CExpert) , tudo funciona correctamente...
A primeira opção é o meu caso.
Teria todo o gosto em utilizar o CheckPointer() e outros métodos de verificação (nasci no mesmo dia), mas o crash do gráfico da EA não me dá a oportunidade de o fazer.
Deixem-me esclarecer - se eu especificar no construtor que o ponteiro é igual a NULL e quebrar todas as acções possíveis com ele, a EA receberá 281 e sairá (e de acordo com a minha ideia não deve).
Mas se chamar o Init ou InitXXX depois do construtor (semelhante ao CExpert) , tudo funciona correctamente...
Se tivesse tratado de excepções, poderia facilmente descobrir qual era a questão e resolvê-la.
A primeira opção é o meu caso.
Teria todo o prazer em utilizar CheckPointer() e outros métodos de verificação (penso que não nasci ontem), mas o crashing EA do gráfico não me dá qualquer hipótese.
Deixem-me esclarecer - se eu especificar no construtor que o ponteiro é igual a NULL e parar quaisquer acções com ele, o Expert Advisor receberá 281 e sairá (enquanto que de acordo com a minha ideia não deve).
Se chamar o Init ou InitXXX depois do construtor (semelhante ao CExpert) , tudo funciona como deve...
Ainda não lidei com os métodos Init ou InitXXX, mas eu interpretaria "EA sendo puxado para baixo" em si mesmo da seguinte forma: o programa em tempo de execução choca com o ponteiro incorrecto e este gargalo deve ser procurado no código. O meu construtor também inicializa um ponteiro para NULL, mas nada voa para fora.
Se entendi mal a pergunta, lamento.
Obrigado, agora tudo está no seu lugar. Mas, há uma questão adicional - Suponha que ocorre um erro 281, mas é desejável que a EA não seja descarregada. Como devemos lidar com isto?
Deixe-me esclarecer a minha pergunta: O que fazer se o erro 281 ocorrer após todas as etapas da inicialização, mas não afectará o trabalho principal do Expert Advisor de forma crítica o suficiente para não o executar de todo?
Não haverá tratamento de excepção.
Só há uma saída - não usar apontadores incorrectos.
Se houver uma possibilidade (diferente de zero) de que um ponteiro possa estar incorrecto, não se esqueça de o verificar antes de o utilizar.
Não haverá tratamento de excepção.
A única saída é não utilizar apontadores inválidos.
Se houver uma possibilidade (diferente de zero) de que um ponteiro possa estar incorrecto, certifique-se de o testar antes de o utilizar.
A possibilidade (diferente de zero) de um ponteiro poder ser inválido é SEMPRE provável!
Por isso, deve sempre verificar a sua validade antes de TODAS as utilizações! Não apenas após a criação.
Nem sempre, mas é isso que faço em pontos críticos :(
Oh merda, em que se transforma um código puro transparente :) quando se usa a sua recomendação.
Ainda não lidei com os métodos Init ou InitXXX, mas interpretaria "tirar a EA do gráfico" em si mesmo da seguinte forma: o programa durante a sua execução choca com um ponteiro incorrecto e é este estrangulamento no código que precisa de ser procurado. O meu construtor também inicializa um ponteiro para NULL, mas nada voa para fora.
Se entendi mal a pergunta, peço desculpa.
A possibilidade (diferente de zero) de um ponteiro poder ser inválido é SEMPRE possível!
Por isso, deve sempre verificar a sua validade antes de TODAS as utilizações!
Nem sempre, mas em áreas críticas faço :(
C'um caraças, em que se transforma um código puro transparente :) ao utilizar a sua recomendação.
Alternativa: Ter um código limpo e transparente que falha no ponteiro Inválido?
Alternativa: ter um código limpo e transparente.
No ponteiro Inválido e outras situações excepcionais (falha de energia, espaço em disco, etc. Situações EXCLUSIVAS) o programa vai para o bloco de tratamento de excepções, onde o respeitado Interessante (e eu também:) poderia imprimir valores e erros variáveis, analisar a situação e compreender qual é o problema. E, se não houver reacção ao que aconteceu neste bloco, desista.
Evidentemente, isto não invalida as verificações padrão e necessárias. Isto só é aplicável em SITUAÇÕES EXCEPCIONAIS.
Se for classe CExpert, deve chamar pelo menos Init(....). Todos os apontadores lá são inicializados como apontadores para objectos de classes base...
Por exemplo, se o Init ou InitXXX for executado com um erro (devolve falso), o que acontece então?
Ou o que fazer se durante a execução a EA ainda receber 281 (apesar de todas as verificações e truques), mas não houver nenhum comerciante por perto?
Se tivesse tratado de excepções, poderia facilmente descobrir o que estava errado e lidar com a situação.
Os controlos estão lá quase todos os passos, mas infelizmente o processamento não está lá...
PS
Então, sobre a saída da EA do gráfico - o que fazer para tornar a EA "viva" em qualquer iniciação?
Alternativa: Ter um código transparente limpo, a cair por um ponteiro Inválido?
Bem, esse é o ponto que voa, deixe-me eu próprio decidir neste caso se o perito deve ser puxado para baixo ou não.
Afinal, não estamos sequer a falar de um ponteiro "partido" ser aplicado algures, embora eu pessoalmente tenha uma verificação antes de o aplicar (embora eu possa implementar outra verificação no temporizador).
De alguma forma aprendi a viver em harmonia com os indicadores e não me importo muito com os resultados da iniciação, mas não posso fazer amigos com apontadores.
Ainda não lidei com os métodos Init ou InitXXX, mas interpretaria o "despejo EA" da seguinte forma: o programa em tempo de execução choca com um ponteiro incorrecto e este estrangulamento deve ser procurado no código. O meu construtor também inicializa um ponteiro para NULL, mas nada voa para fora.
Se compreendi mal a pergunta, peço desculpa.
Actualmente, a fim de resolver o problema, estou a regressar 0 no bloco de inicialização.
Como entendi, é a melhor saída para mim (para que a EA não caia na inicialização). Ou seja, em qualquer caso, resultado OnInit = 0, não posso julgar quão correcto é.