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

 
Alexey Navoykov :

그들은 한때 이 스레드에서 의사 코드를 제공했습니다. 보세요. 내가 기억하는 한, 어레이 크기가 이 용량을 초과할 때만 용량이 증가합니다. 물론 상황이 바뀔 수 있지만.

그리고 용량 값을 구하는 기능은 정말 필요합니다.

정보 감사합니다. 지금까지 fxsaber가 같은 것을 찾는 방법을 찾았습니다.))

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

오류, 버그, 질문

fxsaber , 2018.04.13 10:04

ArrayResize 소스 코드가 게시된 개발자 게시물을 찾도록 도와주세요. Google 검색 "site:mql5.com/ru/forum ArrayResize+reserve"가 도움이 되지 않습니다.

출처가 있었던걸로 기억합니다. Reserve 매개변수의 구현이 어떤 논리인지 즉시 보여줍니다.

버즈에서 검색, 포럼에서 검색, 주요 개발자 프로필에서 검색...
ArrayResize에서 값이 -1인 reserved_size를 사용하여 이전에 할당된 메모리를 지우는 기능 외에도 아무 것도 찾지 못했습니다.
 
Sergey Dzyublik :

정보 감사합니다. 지금까지 fxsaber가 같은 것을 찾는 방법을 찾았습니다.))

그리고 나는 그것을 찾지 못했다)

@Slava 가 그것에 대해 쓴 것처럼.

 

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

오류, 버그, 질문

일리아스 , 2016.08.24 11:08

배열("내부") 은 배열이 할당된 요소 수 아래에 할당된 저장합니다.

예비 작업 논리(조건부 코드):
 ArrayResize (arr, int size, int reserve)
  {
   if (arr.allocated<size)
       if (!ArrayAllocateMemory(arr,size+reserve))   // -> arr.allocated=size+reserve;
         return (- 1 );
   //---
   CallConstructorsOrDestructors(arr,size);
   //---
   arr.size=size;
   return (size);
  }

 
Alexey Navoykov :

도와 주셔서 감사합니다.
안타깝게도 이 코드는 기존 질문 에 대한 답변을 제공하지 않습니다.

 
class A{
   uchar data;
};
 
template < typename T>
class B{
public :
   T data;
};

template < typename T>
class C {
public :
   uchar data;
};


void OnStart (){
   A a;
   B<A> b;
   C<A> c;
   
   a = (A)(a);
   b = (B<A>)(b);     //'(' - invalid cast operation
   c = (C<A>)(c);     //code generation error            
}
"자신에게" 유형 캐스트를 수행하면 모든 데이터 유형 이 ...
템플릿 클래스는 컴파일 중에 중단되지만 구조에서는 모든 것이 정상입니다.
 
더티 후크로 예비를 얻을 수 있고 핸들로 크기 조정 동작을 확인할 수 있습니다.
 
TheXpert :
더티 후크로 예비를 얻을 수 있고 핸들로 크기 조정 동작을 확인할 수 있습니다.

아마도 배열 객체의 메모리에서 예약된 크기 미만의 변수는 크기 미만의 변수 옆에 있을 것입니다.
그러나 현재 배열 개체의 예약된 크기 필드에 대한 ArrayResize 의 영향을 연구하기 위해 디버깅하거나 MT 메모리를 파고드는 것보다 12가지 더 많은 우선 순위 작업이 있습니다.

 
Sergey Dzyublik :
 #import "msvcrt.dll"
   long memcpy( int &dst[], long &src, int cnt);
#import

struct ArrayStore
{
   long offset;
   double x[];
   
   int capacity() 
   {
       int ints[ sizeof (ArrayStore) / sizeof (int)];
      memcpy(ints, this .offset, sizeof (ArrayStore));
       return ints[ 8 ];
   }
};

void OnStart ()
{
   ArrayStore store;
   ArrayResize (store.x, 17 , 8755 );
   Print ( "all reserved size = " , store.capacity()); // 8772
}
 
Sergey Dzyublik :
"자신에게" 유형 캐스트를 수행하면 모든 데이터 유형 이 ...
템플릿 클래스는 컴파일 중에 중단되지만 구조에서는 모든 것이 정상입니다.

메시지 주셔서 감사합니다.

이것은 기초입니다. 수정하십시오.

 
TheXpert :

감사합니다. WinApi를 사용하여 프로세스 메모리에 액세스하는 것에 대해 생각하지 않았습니다.

추신. PM이 닫혀서 여기에 씁니다.
"리버스 엔지니어링에서 후크라는 용어는 특정한 의미를 갖습니다. 즉, 일부 기능이나 이벤트에 대한 호출을 가로채기 위한 코드입니다."