Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
"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 é.