MT5에서 어레이를 강제로 지우시겠습니까?

 

저는 MT5로 진지하게 작업한 적이 없으며 지금은 한 번에 거대한 프로젝트를 옮기고 있습니다. 당연히 어려움이 발생하며 그 중 하나는 어레이의 지속적인 오버플로입니다. MT4에서는 선언 후에 배열을 특별히 지울 필요가 없었기 때문에 밝혀진 바와 같이 그러한 문제가 없었습니다. 그리고 MT5에서는 필요합니다. 내 기술은 크기 조정과 함께 코어를 점진적으로 채워야 합니다. 일부 어레이의 정확한 크기는 미리 알 수 없습니다. 동시에 어레이를 채우는 과정에서 어레이를 통한 많은 사이클 수로 인해 오버런이 발생합니다. 세포에 쓰레기가 없다면 모든 것이 오래 전에 작동했을 것입니다.

즉, 한편으로는 배열의 가비지, 다른 한편으로는 범위를 벗어날 때 치명적인 오류가 발생합니다. 직선적이고 엄격한 조건 ...

MT4에서와 같이선언된 변수 를 0으로 만드는 것과 함께 배열의 자동 정리를 제거해야 하는 이유를 이해하고 싶습니다.

여전히 변수를 참을 수 있다면 대규모 배열에서 지속적으로 가비지 문제에 부딪히고 선언할 때뿐만 아니라 크기를 조정할 때도 독립적으로 청소를 처리합니다... 왜?

 

오버플로가 발생하는 이유는 배열이 다른 함수에서 점차적으로 값으로 채워지고 이 과정에서 다른 셀을 통해 한 셀에 액세스하기 때문입니다. 일부 함수는 두 번 호출 되어 배열을 순차적으로 채웁니다 . 그러나 셀에 쓰레기가 있으면 첫 번째 채우기에 오버플로가 있습니다.

아마도 사전에 어레이를 지워서 문제를 해결할 수 있지만 물론 이것은 추가적인 골칫거리입니다. 불쌍해.

 
좋아, 불평하지 맙시다. )) 익숙해지기만 하면 됩니다.))
 

그것에 익숙해.

나는 항상 배열을 선언 하고 예상 크기를 설정하고 값으로 채웁니다(초기화). 0이 아닌 값으로 초기화하는 것이 더 나은 경우가 많습니다. 이렇게 하면 오류를 찾기가 더 쉽습니다.

 
피터, 무슨 말인지 이해가 안 가?
동적 배열 이 있고 이 배열의 현재 크기가 있으며 오버플로 제어가 있습니다.
개인적으로 오버플로 제어에서 벗어나 개발 단계에서만 사용하려고 하기 때문입니다. 알고리즘이 오류 없이 읽을 수 있으면 오버플로가 발생하지 않습니다. 왜 추가 검사를 합니까?
오버플로가 있는 경우 자신의 오류를 찾으십시오. 중단점이 있는 디버거가 도움이 되거나 중단점이 없기 때문입니다. 오버플로가 발생하면 프로그램이 디버그 모드에서 중지되고 변수를 볼 수 있습니다.
그리고 쓰레기가 있다면, 당신이 치우지 않은 것은 당신의 쓰레기입니다.
 
Реter Konow :

저는 MT5로 진지하게 작업한 적이 없으며 지금은 한 번에 거대한 프로젝트를 옮기고 있습니다. 당연히 어려움이 발생하며 그 중 하나는 어레이의 지속적인 오버플로입니다. MT4에서는 선언 후에 배열을 특별히 지울 필요가 없었기 때문에 밝혀진 바와 같이 그러한 문제가 없었습니다. 그리고 MT5에서는 필요합니다. 내 기술은 크기 조정과 함께 코어를 점진적으로 채워야 합니다. 일부 어레이의 정확한 크기는 미리 알 수 없습니다. 동시에 어레이를 채우는 과정에서 어레이를 통한 많은 사이클 수로 인해 오버런이 발생합니다. 세포에 쓰레기가 없다면 모든 것이 오래 전에 작동했을 것입니다.

즉, 한편으로는 배열의 가비지, 다른 한편으로는 범위를 벗어날 때 치명적인 오류가 발생합니다. 직선적이고 엄격한 조건 ...

MT4에서와 같이 선언된 변수 를 0으로 만드는 것과 함께 배열의 자동 정리를 제거해야 하는 이유를 이해하고 싶습니다.

여전히 변수를 참을 수 있다면 대규모 배열에서 지속적으로 가비지 문제에 부딪히고 선언할 때뿐만 아니라 크기를 조정할 때도 독립적으로 청소를 처리합니다... 왜?

나도 처음에 같은 문제에 부딪쳤다.

제 생각에는 배열이 특정한 방식으로 채워져 있기 때문에 주기의 빈도를 고려해야 합니다.

 
Nikolai Semko :
피터, 무슨 말인지 이해가 안 가?

거의 같은 https://www.mql5.com/ru/forum/293630/page179#comment_10802823

이제 MQL5가 책임이 있습니다... ;)

Мой подход. Ядро - Движок.
Мой подход. Ядро - Движок.
  • 2019.02.28
  • www.mql5.com
В этой ветке, я хочу рассказать о своем подходе в программировании. Заранее предупреждаю, - здесь не будет обсуждений GUI...
 
Igor Makanu :

거의 같은 https://www.mql5.com/ru/forum/293630/page179#comment_10802823

이제 MQL5가 책임이 있습니다... ;)

네. 어쩐지 MQL4에 익숙해졌다.
오버플로를 제어할 필요가 없는 것은 무엇입니까? 하지만 끔찍합니다. 오류를 잡는 방법?
 
Nikolai Semko :
네. 어쩐지 MQL4에 익숙해졌다.
오버플로를 제어할 필요가 없는 것은 무엇입니까? 하지만 끔찍합니다. 오류를 잡는 방법?

Nikolay, MQL4에 대해 걱정하지 마십시오. 모든 것이 정상입니다. Topikstarter는 무작위로 배열을 채웁니다 . 모두.

 
Nikolai Semko :
네, 그렇습니다. 어쩐지 MQL4에 익숙해졌다.
오버플로를 제어할 필요가 없는 것은 무엇입니까? 하지만 끔찍합니다. 오류를 잡는 방법?

물론 필요합니다.

자신과 자신의 프로그램을 존중하는 프로그래머는 모든 것이 순조롭게 진행되도록 내버려 두지 않을 것입니다. MQL4에서 #property strict를 사용하지 않으면 인덱스 20에서 크기가 10인 배열을 참조할 수 있습니다. 그리고 아무 일도 일어나지 않을 것입니다. 프로그램은 계속 작동하지만 프로그래머가 거기에서 무엇을 가져와 사용할 것입니까? 그의 어깨에. 그가 똑똑하다면 그는 배열 외부의 값을 얻지 않도록 모든 것을 확실히 확인하고 통제 할 것이지만 그가 "실수"라면 그는 그러한 통제에 신경 쓰지 않으며 "주요한 것은 그것은 작동하지만 어떻게 - 글쎄, 어떻게 - 스레드 ...".
대부분의 경우, 아무 것도 귀찮게하지 않고 울부 짖는 것은 그러한 사용자였습니다. 이제는 "나쁘고 사악하고 복잡한 MQL5"를 비난합니다. 이전과 같이 공예품을 엉망으로 만들 수 없기 때문입니다. 그러나 처음에 수신 데이터를 확인하고 제어하여 코드를 생각하고 만든 사람들은 언어의 복잡성에 차이를 느끼지 못했고 이제는 "복잡성이 어디에 있습니까? 모든 것이 동일합니다 ..."

 
Реter Konow :

저는 MT5로 진지하게 작업한 적이 없으며 지금은 한 번에 거대한 프로젝트를 옮기고 있습니다.

다시 작성할 때 배열의 심각한 차이

다차원 배열 을 위한 ArrayResize의 기능

 void OnStart ()
{
   int Array[][ 2 ];
  
   Print ( ArrayResize (Array, 7 )); // MQL5 - 7, MQL4 - 14
   Print ( ArraySize (Array));       // 14
}

사유: