앗. 지원 질문 - 페이지 14

 
Yedelkin :

" 유효하지 않은 포인터 접근 " == " 유효하지 않은 포인터 접근을 시도했습니다"? 그렇다면

다음과 같은 경우 포인터가 유효하지 않을 수 있습니다.

  • 포인터가 NULL 입니다.
  • 객체가 삭제 연산자를 사용하여 파괴된 경우.

첫 번째 옵션은 내 경우입니다.

나는 기꺼이 사용할 것입니다 CheckPointer() 및 기타 검사 방법(어제 태어난 것과 다름)이지만 차트에서 Expert Advisor를 제거해도 그럴 기회가 없습니다.

나는 명확히 할 것입니다 - 포인터가 다음과 같다는 생성자에서 지정할 가치가 있습니다 NULL 이고 동시에 모든 작업을 중지하면 EA가 281을 수신하고 충돌합니다(내 생각에 따르면 그러지 않아야 함).

생성자 다음에 Init 또는 InitXXX 를 호출하는 경우( CExpert 와 유사) 모든 것이 제대로 작동합니다...

 
Interesting :

첫 번째 옵션은 내 경우입니다.

나는 기꺼이 CheckPointer() 및 다른 검사 방법(어제 태어난 것과 다름)을 사용하고 싶지만 차트에서 Expert Advisor를 제거해도 기회가 없습니다 .

나는 명확히 할 것입니다 - 포인터가 다음과 같다는 생성자에서 지정할 가치가 있습니다 NULL 이고 동시에 모든 작업을 중지하면 EA가 281을 수신하고 충돌합니다(내 생각에 따르면 그러지 않아야 함).

생성자 다음에 Init 또는 InitXXX 를 호출하는 경우(CExpert와 유사) 모든 것이 제대로 작동합니다...


그리고 예외 처리가 있을 것입니다. 문제가 무엇인지 매우 쉽게 이해하고 상황을 해결할 수 있습니다.
 
Interesting :

첫 번째 옵션은 내 경우입니다.

나는 기꺼이 사용할 것입니다 CheckPointer() 및 기타 검사 방법(어제 태어난 것과 다름)이지만 차트에서 Expert Advisor를 제거해도 그럴 기회가 없습니다.

나는 명확히 할 것입니다 - 포인터가 다음과 같다는 생성자에서 지정할 가치가 있습니다 NULL 이고 동시에 모든 작업을 중지하면 EA가 281을 수신하고 충돌합니다(내 생각에 따르면 그러지 않아야 함).

생성자 다음에 Init 또는 InitXXX 를 호출하는 경우(CExpert와 유사) 모든 것이 제대로 작동합니다...

나는 아직 Init 또는 InitXXX 방법을 다루지 않았지만 그 자체로 "차트에서 Expert Advisor의 철거"를 다음과 같이 해석할 것입니다: 프로그램이 실행 중에 잘못된 포인터를 우연히 발견하고 이것을 찾아야 합니다 코드의 병목 현상. 내 생성자는 또한 NULL에 대한 포인터를 초기화하지만 아무 것도 충돌하지 않습니다.

질문을 잘못 이해했다면 죄송합니다.

 
Interesting :

감사합니다. 이제 모든 것이 준비되었습니다. 그러나 추가 질문이 있습니다. 오류 281이 발생 한다고 가정 해 봅시다. 그러나 어드바이저가 언로드되지 않는 것이 바람직합니다. 그러면 어떻게 될까요?

질문을 명확히 하겠습니다. 모든 초기화 단계가 완료된 후 281번째 오류가 발생했지만 이것이 Expert Advisor의 주요 작업에 너무 치명적이어서 전혀 실행되지 않는 경우에는 어떻게 됩니까?

예외 처리는 없을 것입니다.

방법은 하나뿐입니다. 잘못된 포인터를 사용하지 마십시오.

포인터가 유효하지 않을 가능성이 0이 아닌 경우 사용하기 전에 반드시 확인하십시오.

 
uncleVic :

예외 처리는 없을 것입니다.

방법은 하나뿐입니다. 잘못된 포인터를 사용하지 마십시오.

포인터가 유효하지 않을 가능성이 0이 아닌 경우 사용하기 전에 반드시 확인하십시오.


포인터가 올바르지 않을 수 있는 확률(0 제외)은 절대적으로 항상 있습니다!

따라서 항상 사용하기 전에 유효성을 확인해야 합니다! 그리고 창조 이후에만 그런 것이 아닙니다.

항상 그런 것은 아니지만 중요한 영역에서 수행합니다 :(


당신의 추천을 사용할 때 깨끗한 투명 코드가 :)로 바뀌는 것을 엿 먹으십시오.

 
Yedelkin :

나는 아직 Init 또는 InitXXX 방법을 다루지 않았지만 그 자체로 "차트에서 Expert Advisor의 철거"를 다음과 같이 해석할 것입니다: 프로그램이 실행 중에 잘못된 포인터를 우연히 발견하고 이것을 찾아야 합니다 코드의 병목 현상. 내 생성자는 또한 NULL에 대한 포인터를 초기화하지만 아무 것도 충돌하지 않습니다.

질문을 잘못 이해했다면 죄송합니다.

CExpert 클래스에 대해 이야기하고 있다면 적어도 Init(...)를 호출할 가치가 있습니다. 모든 포인터는 기본 클래스 개체에 대한 포인터로 초기화됩니다.
 
falkov :

포인터가 올바르지 않을 수 있는 확률(0 제외)은 절대적으로 항상 있습니다!

따라서 항상 사용하기 전에 유효성을 확인해야 합니다!

항상 그런 것은 아니지만 중요한 영역에서 수행합니다 :(


당신의 추천을 사용할 때 깨끗한 투명 코드가 :)로 바뀌는 것을 엿 먹으십시오.

대안: 잘못된 포인터 에서 깨끗한 투명 코드가 충돌합니까?
 
uncleVic :
대안: 잘못된 포인터에서 깨끗한 투명 코드가 충돌합니까?

대안: 깨끗하고 투명한 코드를 사용하십시오.

잘못된 포인터 및 기타 예외적인 상황(전원 끄기, 디스크 공간 등 예외적인 상황)의 경우 프로그램은 예외 처리 블록으로 이동 합니다 . 오류, 상황을 분석하고 문제가 무엇인지 이해하십시오. 그리고, 이 블록에서 일어난 일에 반응이 없다면, 떨어져요.

당연히 이것은 표준 및 필요한 검사를 취소하지 않습니다. 예외적인 상황만

 
uncleVic :
CExpert 클래스에 대해 이야기하는 경우 최소한 Init(...)를 호출할 가치가 있습니다. 모든 포인터는 기본 클래스 개체에 대한 포인터로 초기화됩니다.

Init 또는 InitXXX가 실패하면(거짓 반환) 그러면 어떻게 될까요?

또는 실행 중에 Expert Advisor(모든 수표 및 문제 포함)가 281이 되고 거래자가 주변에 없으면 어떻게 해야 합니까?

팔코프 :

그리고 예외 처리가 있을 것입니다. 문제가 무엇인지 매우 쉽게 이해하고 상황을 해결할 수 있습니다.

글쎄요, 그래서 필요한 처리가 없습니다. 거의 모든 단계에서 검사가 있지만 불행히도 처리가 없습니다 ...

추신

따라서 차트에서 Expert Advisor의 이탈에 대해 - Expert Advisor가 초기화 동안 모든 컴파일에서 "살아있는" 상태로 유지되도록 하려면 어떻게 해야 합니까?

 
uncleVic :
대안: 잘못된 포인터에서 깨끗한 투명 코드가 충돌합니까?

따라서 문제의 사실은 출발하는 "나"가 이 경우 전문가를 철거해야 하는지 여부를 스스로 결정하게 하는 것입니다.

결국, 우리는 "깨진" 포인터가 어딘가에서 사용된다는 사실에 대해 이야기하지도 않습니다. 비록 개인적으로 그것을 사용하기 전에 확인을 하고 있지만(비록 타이머에서 여전히 확인을 구현할 수는 있지만).

어떻게든 인디케이터와 조화롭게 사는 법을 배웠고 초기화 과정에서 DISABILITY라는 별명이 나온 결과는 어쩐지 크게 신경이 쓰이지 않지만 이런 식으로 포인터와 친구가 되는 것은 불가능하다.

예델킨 :

나는 아직 Init 또는 InitXXX 방법을 다루지 않았지만 그 자체로 "차트에서 Expert Advisor의 철거"를 다음과 같이 해석할 것입니다: 프로그램이 실행 중에 잘못된 포인터를 우연히 발견하고 이것을 찾아야 합니다 코드의 병목 현상. 내 생성자는 또한 NULL에 대한 포인터를 초기화하지만 아무 것도 충돌하지 않습니다.

질문을 잘못 이해했다면 죄송합니다.

당면한 작업을 구현하기 위해 초기화 블록에서 어리석게도 0을 반환합니다.

 int OnInit ()
{
//----------------------------------------------------------------------------//

//Processing process of the initialization

//----------------------------------------------------------------------------//
return ( 0 );
//----------------------------------------------------------------------------//
}

내가 알기로는 이것이 가장 좋은 방법입니다(초기화 중에 Expert Advisor가 충돌하지 않도록). 저것들. 어쨌든 OnInit = 0 의 결과는 이것이 얼마나 정확한지 판단할 수 없습니다.