Hatalar, hatalar, sorular - sayfa 2468

 
Alexey Navoykov :

Bir keresinde bu konuya sözde kod vermişler, bak. Hatırladığım kadarıyla orada kapasite ancak dizi boyutu bu kapasiteyi aştığında artıyor. Her ne kadar, elbette, işler değişebilir.

Ve kapasite değerini elde etme işlevi gerçekten çok gerekli.

Bilgi için teşekkürler, şimdiye kadar fxsaber'ın aynı şeyi nasıl aradığını buldum))

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Hatalar, hatalar, sorular

fxsaber , 2018.04.13 10:04

ArrayResize kaynak kodunun gönderildiği geliştiricinin gönderisini bulmama yardım et. Google araması "site:mql5.com/ru/forum ArrayResize+reserve" yardımcı olmuyor.

Bir kaynak olduğunu hatırlıyorum. Rezerv parametresinin uygulanmasının hangi mantık olduğunu hemen gösterir.

Buzz'da arandı, forumda arandı, ana geliştiricilerin profillerinde arandı...
Daha önce ayrılmış belleği temizlemek için ArrayResize'da -1 değeriyle Reserve_size kullanma yeteneğine ek olarak hiçbir şey bulamadım.
 
Sergey Dzyublik :

Bilgi için teşekkürler, şimdiye kadar fxsaber'ın aynı şeyi nasıl aradığını buldum))

Ve onu bulamadım

@Slava'nın bu konuda yazdığı gibi.

 

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Hatalar, hatalar, sorular

İlyas , 2016.08.24 11:08

Dizi ("inside"), ayrılan - dizinin kaç öğenin altında ayrıldığını saklar.

Yedekle çalışmanın mantığı (koşullu kod):
 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 :

Yardım için teşekkürler.
Ne yazık ki, bu kod mevcut sorulara herhangi bir cevap vermiyor.

 
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            
}
"Kendine" tip dökümü gerçekleştirin, ortaya çıktı, tüm veri türleri yapamaz ...
Şablon sınıfları derleme sırasında bozulur, ancak yapılarda her şey yolundadır.
 
Kirli kancalarla rezervi alabilir ve yeniden boyutlandırma davranışını tutamaçlarla kontrol edebilirsiniz.
 
TheXpert :
Kirli kancalarla rezervi alabilir ve yeniden boyutlandırma davranışını tutamaçlarla kontrol edebilirsiniz.

Muhtemelen, dizi nesnesinin belleğinde, ayrılmış boyutun altındaki değişken, boyut altındaki değişkenin yanında yer alır.
Ancak şu anda, ArrayResize'ın bir dizi nesnesinin ayrılmış boyut alanı üzerindeki etkisini incelemek için hata ayıklamaktan veya MT belleğine kazmaktan bir düzine daha öncelikli görev vardır.

 
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 :
"Kendine" tip dökümü gerçekleştirin, ortaya çıktı, tüm veri türleri yapamaz ...
Şablon sınıfları derleme sırasında bozulur, ancak yapılarda her şey yolundadır.

Mesaj için teşekkürler.

Bu bir hata, düzelteceğiz.

 
TheXpert :

Teşekkürler, WinApi kullanarak işlem belleğine erişmeyi düşünmedim.

not PM kapalı o yüzden buraya yazıyorum:
"Tersine mühendislikte, kanca teriminin belirli bir anlamı vardır - bir işleve veya olaya yapılan bir çağrıyı engelleme kodu."

Neden: