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

 
Slawa :

1. 다섯이나 네? 4개 정도 되는 것 같아요. 테스터 창을 확대하면 됩니다.

2. 응시 및 시험

ㅎㅎ 감사합니다 (mt4)
1366 x 768((화면의 1/3까지 확장해야 합니다.
투시 능력은 당신의 수준입니다.

 
A100 :

더 간단한 예를 들어보자

공식적으로 질문에 접근하면 A( A& ) 형식의 호출이 몇 개입니까? 하나. 최소한 C++는 중간 객체를 생성하지 않습니다.

아마도 C++에서 RVO(반환 값 최적화)가 기본값입니까?
 
A100 :

1. 복사 생성자의 이중 호출

2. "leaked memory" 메시지 없음(삭제 없이 새로 추가됨)

  1. RVO 최적화(NRVO도 있음)에 대해 올바르게 언급되었습니다. 현재 MQL 컴파일러에는 없지만 향후에 추가될 예정입니다(현재로서는 이 최적화를 우선 순위가 아닌 작업으로 간주합니다).
  2. 재생산되지 않습니다. 재생산을 위해 중요한 세부 사항을 빠뜨렸을 수 있으므로 다시 확인하십시오.
 
Ilyas : 2. 재생산할 수 없습니다. 재생산에 대한 중요한 세부 정보를 지정하지 않았을 수 있으므로 다시 확인하십시오.

단순화된 예

 class A { public :
    A()          { Print ( __FUNCTION__ ); }
     virtual ~A() { Print ( __FUNCTION__ ); }
};
void OnStart ()
{
     new A();
}

결과:

2016.08.15 14:17:39.093 Script1 (GBPUSD,M15) A::A

결론: 소멸자가 호출되지 않고 동시에 메모리 누수 메시지가 없습니다(다음 예와 같이).

 //Script2.mq5
class A { public :
    A()          { Print ( __FUNCTION__ ); }
     virtual ~A() { Print ( __FUNCTION__ ); }
};
void OnStart ()
{
    A *a = new A();
}

결과:

2016.08.15 14:26:27.993 Script2 (GBPUSD,M15) 16바이트 메모리 유출
2016.08.15 14:26:27.993 Script2 (GBPUSD,M15) A형 객체 1개 남음
2016.08.15 14:26:27.993 Script2 (GBPUSD,M15) 삭제되지 않은 개체 1개 남음
2016.08.15 14:26:27.992 Script2 (GBPUSD,M15) A::A

 
명확하게 해 주셔서 감사합니다. 재현됨 - 보고된 누출이 없으며 그 이유는 다음과 같습니다.

여기서 옵티마이저가 오버라이드했기 때문에 new operator 에서 생성된 메모리 또는 포인터 작업이 없는 경우 해당 메모리 할당이 제거되었습니다.

사용하지 않는 변수에 대한 포인터를 저장해도 새 작업의 삭제가 차단되지 않도록 최적화 프로그램의 이 "기능"을 수정하거나 개선할 가치가 있는지 여부를 고려할 것입니다.

 
안녕하세요.
개발자 여러분, MQL4와 MQL5에는 Expert Advisor에서 인디케이터 서브윈도우를 삭제하는 기능이 있는데 인디케이터 창을 생성하는 기능은 없는 이유를 알려주세요.
템플릿을 사용하거나 창 표시기를 수동으로 실행해야 하므로 편리하지 않습니다. 그래프에 표시된 정보가 손실됩니다.
예, 리소스 파일에서 표시기를 실행하고 표시할 수 있기를 원합니다.
또는 정리하는 방법을 알려주세요.
 
Slawa :

그리고 "시각화로 인생 핵"을 마련한 것은 당신이 아니었나요?

이것이 버그라고 어떻게 결정하셨습니까? 폴더 이름은 연결이 발생한 포트 번호에 해당합니다.

나였어.... 고마워, 알았어.
 
나는 매크로를하고있다
 #define MACROS(A) "##A##"
MACROS(Num)를 "Num"으로 바꾸고 싶지만 항상 "##A##"로 나옵니다. 원하는 것을 얻기 위해 매크로를 정의할 수 있습니까?

 

작은 발견을 했다

 void OnStart ()
{  
   double dPrice = 1.08249 ;
   int iPrice = ( int )((dPrice / _Point ) + 0.1 );
   double dNewPrice = iPrice * _Point ; // При этом нормализации это значение не требует в OrderSend
  
   if (dPrice != dNewPrice)
     Print (( string )(dPrice - dNewPrice)); 
}

Integer * Point(정규화 없음)의 가격으로 주문을 개설한 후 개시가를 요청하면 정규화되지 않은 Integer * Point와 다릅니다.

Integer * Point 형식의 비정규화된 가격이 항상 OrderSend에서 롤링되는 이유는 무엇입니까?

 
fxsaber :
매크로를 하고 있는데 MACROS(Num)를 "Num"으로 바꾸고 싶은데 항상 "##A##"로 나옵니다. 원하는 것을 얻기 위해 매크로를 정의할 수 있습니까?

매크로 본문에서 따옴표 제거

매크로 매개변수를 문자열로 변환하려면 #을 사용하십시오:

 #define MACROS(A) #A
##은 토큰을 접착하는 데 사용됩니다.
사유: