오류, 버그, 질문 - 페이지 1838

 

이것은 정상이며 절대적으로 정확합니다. 동적 개체의 내부 크기(페이로드 제외)를 요청했습니다.

동적 개체 에는 ArraySize 를 사용하고 정적 개체에는 sizeof만 사용합니다. Sizeof는 컴파일 타임에 고려되며 항상 상수입니다.

 
Renat Fatkhullin :

이것은 정상이며 절대적으로 정확합니다.

동적 개체 에는 ArraySize 를 사용하고 정적 개체에는 sizeof만 사용합니다.

고맙습니다! 이 권장 사항에 따라 인증서를 가져오십시오.
 

문서를 끝까지 읽으십시오

Вычисления размера происходит на этапе компиляции.

 

나는 매우 혼란에 도움을 요청합니다. 설명하기 위해 이 스크립트를 작성했습니다.

 struct STRUCT 
{
   int a;
};

class CLASS
{
public :
   int a;
};

STRUCT f1()
{  
   static int i = 0 ;
  
  STRUCT Res;
  
  Res.a = i++;   
  
   return (Res);
}

CLASS* f2()
{
   static int i = 0 ;
  
  CLASS* Res = new CLASS;
  
  Res.a = i++;
  
   return (Res);
}

void OnStart ()
{
   int i1 = f1().a + f1().a;  
   int i2 = f2().a + f2().a;
}

구조가 있고 유사한 클래스가 있습니다. i1이 유사하게 계산될 때 구조 객체에서 발생하는 것처럼 i2 계산 후에 해당 클래스 객체가 자발적으로 삭제되어야 합니다. 이것을 확인하는 방법?

 

fxsaber :

이것을 확인하는 방법?

mql을 사용하여 수행할 수 있는지 확실하지 않은 스마트 포인터로 래핑
 
Комбинатор :
mql을 사용하여 수행할 수 있는지 확실하지 않은 스마트 포인터로 래핑
복잡한 구조를 반환할 수 없기 때문에 문제 자체가 발생했습니다. 예를 들어 위의 코드에서 int 대신 a; 문자열을 a로 만듭니다. , f1() 반환 시 중단됩니다. 따라서 시선은 교실에 떨어졌지만 설명 된 매복이 그곳에서 기다리고있었습니다.
 

일반적으로 복사 생성자와 연산자 =를 재정의할 수 있습니다.

클래스의 경우 이것은 작동하지 않으며 포인터에 의해서만 반환되어야 하는 것으로 보이며 구조는 값에 의해 이루어질 수 있습니다.

 
Комбинатор :

일반적으로 복사 생성자와 연산자 =를 재정의할 수 있습니다.

클래스의 경우 이것은 작동하지 않으며 포인터에 의해서만 반환되어야 하는 것으로 보이며 구조는 값에 의해 이루어질 수 있습니다.

글쎄, 고마워! 나는 최근에 해제된 제한 으로 인해 이 결정이 중단되었습니다. 이제 쟁기질
 struct STRUCT
{
   string Str;

   template < typename T>
   void operator =( const T Value )
  {
     Print ( __FUNCTION__ );
  }
  
   void operator =( const STRUCT &Struct )
  {
     this .Str = Struct.Str;
  }
};

STRUCT f()
{
  STRUCT Res;
  
   return (Res);
}

void OnStart ()
{
  f() = 1 ;
}
 

Advisor를 최적화 할 때 다음 오류가 나타납니다.

0:37:20.429 + 기록 동기화 0:00:43.395에서 "OnTimer 기능의 치명적인 런타임 오류 512(절전 기능이 테스트 끝에 도달함)" 오류로 테스트된 유전적 패스(0, 3)

단일 테스트는 오류 없이 통과합니다.

MT5 및 MetaEditor 1571용 버전입니다.

 
pivomoe :

Advisor를 최적화 할 때 다음 오류가 나타납니다.

0:37:20.429 + 기록 동기화 0:00:43.395에서 "OnTimer 기능의 치명적인 런타임 오류 512(절전 기능이 테스트 끝에 도달함)" 오류로 테스트된 유전적 패스(0, 3)

오류를 재현할 수 있도록 어드바이저에서 최대값을 버립니다. 그리고 나머지 코드를 게시하십시오.