エラー、バグ、質問 - ページ 2468

 
Alexey Navoykov:

以前、このスレッドで紹介された疑似コードを探してみてください。 私の記憶では、配列のサイズがこの容量を超えたときだけ、そこの容量が増えるようになっていました。 もちろん、何かが変わっている可能性もありますが。

そして、サラシティの値を取得する機能は、本当に必要なものなのです。

情報ありがとうございます!今のところ、fxsaberが同じものを探している様子がわかりました )) 。

トレーディング、自動売買システム、ストラテジーテストに関するフォーラム

バグ、バグ、質問

fxsaber さん 2018.04.13 10:04

ArrayResizeのソースコードが投稿された開発者の投稿を探すのを手伝ってください。"site:mql5.com/en/forum ArrayResize+reserve "でググっても出てきません。

ソースコードがあったと記憶しています。その中で、リザーブパラメータの実装ロジックをすぐに確認することができます。

Googleで検索したり、フォーラムで検索したり、主要な開発者のプロフィールで検索したり...。
ArrayResizeでreserve_sizeを値-1で使用して、以前に割り当てられたメモリをクリアする可能性の他に、私は何も発見していません。
 
Sergey Dzyublik:

情報ありがとうございます、今のところfxsaberがどのように同じものを探していたかがわかりました ))

私も見つかっていません)

確か@Slava さんが書いていたような気がします。

 

トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム

バグ、バグ、質問

イリヤス さん 2016.08.24 11:08

配列("inside")には、割り当てられた-いくつの要素の 下に配列が割り当てられて いるかが格納されます。

アロケートされたものを扱うロジック(条件分岐コード)です。
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のメモリを掘ることよりも、もっと緊急なタスクが10個あります。

 
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のプロセスメモリへのアクセスについては考えていませんでした。

P.s.個人メッセージは終了しているので、こちらに書かせていただきました。
"リバースエンジニアリングにおいて、フックという用語は特定の意味を持ちます。" "関数やイベントの呼び出しを傍受するコードです。"