Erreurs, bugs, questions - page 2468

 
Sergey Dzyublik:

Merci pour l'information, jusqu'à présent j'ai trouvé comment fxsaber cherchait la même chose ;))

Je ne l'ai pas trouvé non plus).

Je pense que @Slava a écrit à ce sujet.

 

Forum sur le trading, les systèmes de trading automatisé et les tests de stratégies de trading

Bugs, bugs, questions

Ilyas, 2016.08.24 11:08

Le tableau ("inside") stocke les éléments alloués - sous combien d'éléments le tableau est alloué.

La logique de travail avec les attributions (code conditionnel) :
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:

Merci pour votre aide.
Malheureusement, ce code n'apporte aucune réponse aux questions qui nous occupent.

 
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            
}
Il s'avère que tous les types de données ne peuvent pas effectuer un type cast "en soi"...
Les classes de modèles se cassent au moment de la compilation, mais les structures sont correctes.
 
Vous pouvez sortir la réserve avec des crochets sales et vérifier le comportement de redimensionnement avec les poignées.
 
TheXpert:
Vous pouvez obtenir la réserve avec les dirty hooks et vérifier le comportement de redimensionnement avec les handles.

Vraisemblablement, dans la mémoire de l'objet tableau, la variable sous taille réservée se trouve à côté de la variable sous taille.
Mais pour le moment, il y a dix tâches plus urgentes que le débogage ou la fouille de la mémoire de MT pour étudier l'effet de ArrayResize sur le champ de taille réservé de l'objet array.

 
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:
Il s'avère que tous les types de données ne peuvent pas effectuer un type cast "en soi"...
Les classes de modèles se cassent au moment de la compilation, mais les structures sont correctes.

Merci pour le message.

C'est un rudiment, on va le réparer.

 
TheXpert:

Merci, je n'avais pas pensé à l'accès de WinApi à la mémoire du processus.

P.s. Le message personnel est fermé, alors j'écris ici :
"En rétro-ingénierie, le terme hook a une signification spécifique : un code permettant d'intercepter l'invocation d'une fonction ou d'un événement."

 

Je le saurai) puis pirater