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

 
Vitaly Murlenko :

mql4 표시기의 코드가 작동을 멈췄습니다. 어떻게 고치는 지?

편집기는 'ObjectSetInteger'를 작성합니다. 어떤 오버로드도 함수 호출에 적용할 수 없습니다.

몇 년 동안 일하다가 갑자기 멈췄습니다. 하지만 그것은 부끄러운 일입니다.


 else { // Иначе стрелка создана. Задаём её свойства
 ObjectSetInteger ( ChartID (),Open_name, OBJPROP_ARROWCODE ,OpenArrowCode); //код стрелки 232 // или 0 вместо ChartID() для текущего графика 
 ObjectSet (Open_name, OBJPROP_COLOR ,ObjColor); //цвет стрелки
}

그런데 왜 두 가지 스타일을 섞었을까요? 첫 번째 줄을 사용하여 화살표 코드를 정의하는 경우 동일한 스타일의 두 번째 줄을 사용합니다.

 ObjectSetInteger ( 0 ,Open_name, OBJPROP_COLOR ,ObjColor); //цвет стрелки
 

지표의 새 버전을 시장에 업로드하려고 했습니다. 테스트가 오류로 종료되었습니다. 다음 내용과 함께 애플리케이션에 표시된 오류 보고서:

 EURUSD,H1에 대한 테스트(상계)
XAUUSD,D1에 대한 테스트(상계)
GBPUSD,M30(상계)에 대한 테스트
EURUSD,M1에 대한 테스트(상계)
 2016.05.31 21:45:00 0x00007FF7FD1CA04B에서 액세스 위반 0xFFFFFFFFFFFFFF로 읽기
 2016.05.31 21:45:00 00007FF7FD1CA010 4885D2 테스트 rdx, rdx
 2016.05.31 21:45:00 00007FF7FD1CA013 747B jz 0x7ff7fd1ca090
 2016.05.31 21:45:00   
 2016.05.31 21:45:00 00007FF7FD1CA015 53 푸시 rbx
 2016.05.31 21:45:00 00007FF7FD1CA016 4883EC20 서브 rsp, 0x20
 2016.05.31 21:45:00 00007FF7FD1CA01A 48897C2430 mov [rsp+0x30], rdi
 2016.05.31 21:45:00 00007FF7FD1CA01F 488BD9 mov rbx, rcx
 2016.05.31 21:45:00 00007FF7FD1CA022 488B7AF8 mov rdi, [rdx-0x8]
 2016.05.31 21:45:00 00007FF7FD1CA026 4881FF00004000 cmp rdi, 0x400000
 2016.05.31 21:45:00 00007FF7FD1CA02D 730B 재 0x7ff7fd1ca03a
 2016.05.31 21:45:00 00007FF7FD1CA02F 4883E980 하위 rcx, 0x80
 2016.05.31 21:45:00 00007FF7FD1CA033 E88852CAFF 호출 0x7ff7fce6f2c0 ; #2504(metatester64.exe)
 2016.05.31 21:45:00 00007FF7FD1CA038 EB37 jmp 0x7ff7fd1ca071
 2016.05.31 21:45:00   
 2016.05.31 21:45:00 00007FF7FD1CA03A 488D4AE8 레아 rcx, [rdx-0x18]
 2016.05.31 21:45:00 00007FF7FD1CA03E 488B52E8 mov rdx, [rdx-0x18]
 2016.05.31 21:45:00 00007FF7FD1CA042 4885D2 테스트 rdx, rdx
 2016.05.31 21:45:00 00007FF7FD1CA045 7408 jz 0x7ff7fd1ca04f
 2016.05.31 21:45:00   
 2016.05.31 21:45:00 00007FF7FD1CA047 488B4108 mov rax, [rcx+0x8]
테스터의 문제일까요?
파일:
 
Artyom Trishkin :

그런데 왜 두 가지 스타일을 섞었을까요? 첫 번째 줄을 사용하여 화살표 코드를 정의하는 경우 동일한 스타일의 두 번째 줄을 사용합니다.

덕분에 도움이 되었습니다.

2가지 스타일? 스타일에 대해 잘 몰랐어요. 방금 전에는 이 섹션을 이 방법으로만 수행할 수 있었습니다. 변경 사항이 발생했습니다. 저는 10년 넘게 MQL4로 프로그래밍을 해왔습니다. 이제 개발자는 언어를 변경했고 많은 코드가 작동을 멈췄습니다. 나는 매우 실망했다. 좋지 않은 변화가 있었습니다. 이것은 이제 많은 코드를 다시 실행해야 함을 의미합니다. 비록 그것들은 오래되었지만 전체 마차에 유용했습니다.

 
Gennadiy Stanilevych :

지표의 새 버전을 시장에 업로드하려고 했습니다. 테스트가 오류로 종료되었습니다. 다음 내용과 함께 애플리케이션에 표시된 오류 보고서:

테스터의 문제일까요?

서비스 데스크에 요청을 작성해 주시면 해결해 드리겠습니다.


UPD: 신청서를 찾았습니다.
 
Artyom Trishkin :

동적 배열의 버퍼를 해제하고 null 차원의 크기를 0으로 설정합니다.

스크립트 및 표시기를 작성할 때 ArrayFree() 함수를 사용할 필요가 자주 발생하지 않을 수 있습니다. 스크립트가 종료되면 사용된 모든 메모리가 즉시 해제되고 사용자 지정 표시기에서 배열에 대한 주요 작업은 표시기 버퍼에 대한 액세스이며, 크기는 실행 중인 터미널 하위 시스템에 의해 자동으로 제어됩니다.

프로그램이 복잡한 동적 조건에서 메모리를 독립적으로 관리해야 하는 경우 ArrayFree() 함수를 사용하면 이미 불필요한 동적 배열이 차지하고 있는 메모리를 명시적으로 즉시 해제할 수 있습니다.

이해했나요? 불필요한.

당연히 메모리가 해제되고 배열의 크기를 설정하여 다시 할당하므로 아무도 그 내용을 보장하지 않습니다.

배열 초기화 사용: ArrayInitialize()

아무도 콘텐츠를 보장하지 않는다는 것은 무엇을 의미합니까? 메모리가 해제되면 더 이상 존재하지 않습니다. 그러면 그 안에 있는 쓰레기는 어느 쪽입니까? 아니면 메모리를 지우는 것은 프로그램의 다른 부분이 이 메모리를 사용하도록 허가하고 실제로는 전혀 지우지 않는다는 것을 의미합니까?

 
Aleksey Vyazmikin :

아무도 콘텐츠를 보장하지 않는다는 것은 무엇을 의미합니까? 메모리가 해제되면 더 이상 존재하지 않습니다. 그러면 그 안에 있는 쓰레기는 어느 쪽입니까? 아니면 메모리를 지우는 것은 프로그램의 다른 부분이 이 메모리를 사용하도록 허가하고 실제로는 전혀 지우지 않는다는 것을 의미합니까?

ArrayResize는 메모리를 정리하지 않으므로 이전 "소비자"의 쓰레기가 포함되어 있습니다.

이것은 속도를 위해 수행됩니다. 배열에 메모리를 할당 한 후 99.99(9)%의 경우 사용자는 자신의 데이터로 메모리를 "채울" 것입니다.


 
Vitaly Murlenko :

덕분에 도움이 되었습니다.

2가지 스타일? 스타일에 대해 잘 몰랐어요. 방금 전에는 이 섹션을 이 방법으로만 수행할 수 있었습니다. 변경 사항이 발생했습니다. 저는 10년 넘게 MQL4로 프로그래밍을 해왔습니다. 이제 개발자는 언어를 변경했고 많은 코드가 작동을 멈췄습니다. 나는 매우 실망했다. 좋지 않은 변화가 있었습니다. 이것은 이제 많은 코드를 다시 실행해야 함을 의미합니다. 비록 그것들은 오래되었지만 전체 마차에 유용했습니다.

mql4 ObjectSetXXX 기능이 도입되기 전에 화살표 코드가 이렇게 설정되어 있지 않습니까?

 ObjectSet (Open_name, OBJPROP_ARROWCODE ,OpenArrowCode);

저는 이미 약 10년 동안 mql로 글을 작성해 왔습니다(아마 더 많은 - 시간이 어떻게 가는지...) - 저는 이미 순수한 쿼드 함수를 잊어버리기 시작했습니다. - 가능하면 다중 플랫폼 코드를 작성합니다.

 
Ilyas :

ArrayResize는 메모리를 정리하지 않으므로 이전 "소비자"의 쓰레기가 포함되어 있습니다.

이것은 속도를 위해 수행됩니다. 배열에 메모리를 할당 한 후 99.99(9)%의 경우 사용자는 자신의 데이터로 메모리를 "채울" 것입니다.


그렇다면 터미널을 다시 시작한 후에도 "쓰레기"의 디지털 값이 일정한 이유는 무엇입니까?

개인적으로 다른 어레이의 셀 내용을 간단하게 요약하는 데 지쳐서 뭐가 문제인지 한참을 어리둥절했다.

       for ( int i= 1 ;i<StrokTotal; i++)
        {
         for ( int s= 3 ;s< 56 + 1 ; s++)
           {               
            SummArrA[s]=SummArrA[s]+ArrTest[i,s];
           }
        }     
 
Aleksey Vyazmikin :

그렇다면 터미널을 다시 시작한 후에도 "쓰레기"의 디지털 값이 일정한 이유는 무엇입니까?

개인적으로 다른 어레이의 셀 내용을 간단하게 요약하는 데 지쳐서 뭐가 문제인지 한참을 어리둥절했다.

초기화되지 않은 배열에 어떤 종류의 데이터가 포함되어 있는지는 중요하지 않습니다. 데이터는 언제든지 변경될 수 있으며 아무도 그 값을 보장하지 않습니다.
그렇기 때문에 초기화되지 않은 변수(메모리 읽기)를 사용하면 때때로 원인을 찾는 데 오랜 시간이 걸리는 상황이 발생합니다.

  1. 다른 컴퓨터가 아닌 한 컴퓨터에서 작동합니다.
  2. 테스터가 아닌 터미널에서 작동합니다.
  3. 터미널/OS를 업데이트 한 후 프로그램이 다르게 작동하기 시작했습니다.
  4. 추가된 인쇄 작동이 중지됨
  5. 등.

조언을 드릴 수 밖에 없습니다.
앞으로는 초기화 부족과 관련된 오류를 찾는 데 많은 시간을 소비하지 않도록 항상 데이터를 초기화하는 습관을 개발할 필요가 있습니다.

Автоматическое обновление - Для продвинутых пользователей - MetaTrader 5
Автоматическое обновление - Для продвинутых пользователей - MetaTrader 5
  • www.metatrader5.com
В платформу встроена система автоматического обновления. Она позволяет своевременно получать и устанавливать новые версии программы. Эту систему отключить нельзя. Порядок обновления При подключении к торговому серверу происходит проверка наличия обновлений платформы. Если найдено обновление какого-либо из компонентов торговой платформы...
 
Aleksey Vyazmikin :

아무도 콘텐츠를 보장하지 않는다는 것은 무엇을 의미합니까? 메모리가 해제되었다면 더 이상 존재하지 않습니다 . 그러면 그 안에 있는 쓰레기는 어느 쪽입니까? 아니면 메모리를 지우는 것은 프로그램의 다른 부분이 이 메모리를 사용하도록 허가하고 실제로는 전혀 지우지 않는다는 것을 의미합니까?

"아니오"은(는) 무슨 뜻인가요? 아무도 마더보드의 슬롯에서 메모리 바를 제거하지 않습니다. 그리고 메모리가 있고 해제되기 때문에(즉, 해제된 값으로 초기화되지 않음) 프로그램의 다른 요구 사항에 사용되기 시작합니다.

사유: