Hatalar, hatalar, sorular - sayfa 2571

 
Komut dosyası sona erdikten sonra uzman günlüğündeki uyarı ne anlama geliyor?
 2 leaked strings left

Bu nasıl tedavi edilebilir?
Çevirmen çeviri yapıyor, solda iki satır sızıntı var. Ama net değil, neyin solundaki çizgiler?

Komut dosyası, JAson kitaplığını kullanır.
Json dizesi dll'den memcpy_s aracılığıyla alınır, dll'de bu dize const wchar_t * türüne sahiptir
#import'ta, dışa aktarılan işlevin parametresi, referans yoluyla, dize & str olarak bildirilir ve dizenin kendisi, dize str olarak bildirilir;
Ardından, str dizesi seri durumdan çıkarılır

js.Deserialize(str); 

Sorun, memcpy_s'den gelen satırın seri durumdan çıkarılmasındadır.

Çünkü komut dosyasında bir kontrol json dizesi oluşturursanız

 string str = "{\"s\":\"1000\"}" ;

uyarı mesajı görünmüyor.
Dll'den gelen string'i seri hale getiriyorum, script bittikten sonra uyarı tekrar çıkıyor, sızdırılmış 2 string kaldı

Gelen dizeyi bir StringToCharArray karakter dizisine dönüştürmeye ve karakter dizisini seri durumdan çıkarmaya çalıştım.
Ancak sorun devam ediyor ve 2 sızdırılmış dize de görünüyor.
Nedeni ne olabilir?

 
Dll'den test json dizesini açıkça geçmeye çalıştım
 L"{\"s\":\"1000\"}"
Uyarı 2 sızdırılmış dize kaldı.
Dll'de ağ verilerini okuyan işlevin bu davranışa neden olduğu ortaya çıkıyor.
Ancak kalan
2 sızdırılmış dizenin yorumu net değil, özellikle ne anlama geliyor ve nereye daha fazla kazılmalı?
 
Roman :
Dll'den test json dizesini açıkça geçmeye çalıştım
Uyarı
2 sızdırılmış dize kaldı.
Dll'de ağ verilerini okuyan işlevin bu davranışa neden olduğu ortaya çıkıyor.
Ancak kalan
2 sızdırılmış dizenin yorumu net değil, özellikle ne anlama geliyor ve nereye daha fazla kazılmalı?

Sözel olmayan bir çeviride ise: "2 satır bellek sızıntısına neden olur."

Ve kelimenin tam anlamıyla - bunun gibi bir şey: 2 güncel satır kaldı.

 

iHigh ,iTime işlevleri , günlük olandan daha yüksek zaman dilimleri için test cihazındaki en son MT4 yapısında çalışmıyor

 iHigh ( NULL , PERIOD_W1 , 0 ) = 0
iTime( NULL , PERIOD_W1 , 0 ) = NULL


 
Artyom Trishkin :

Sözel olmayan bir çeviride ise: "2 satır bellek sızıntısına neden olur."

Ve kelimenin tam anlamıyla - bunun gibi bir şey: 2 güncel satır kaldı.

İlginç olan, bir Json dizesi aldığımda ve seri durumdan çıkarmadan onu bir yorumda gösteriyorum, tamamen olduğu gibi, o zaman sızıntı yok.
Dizenin Json öğesini almak için seri durumdan çıkarmaya başlıyorum, akmaya başlıyor.
Kütüphanenin sızdırıp sızdırmadığı belli değil ...

 
Roman :

İlginç olan, bir Json dizesi aldığımda ve seri durumdan çıkarmadan onu bir yorumda gösteriyorum, tamamen olduğu gibi, o zaman sızıntı yok.
Dizenin Json öğesini almak için seri durumdan çıkarmaya başlıyorum, akmaya başlıyor.
Kütüphanenin sızdırıp sızdırmadığı belli değil ...

Akan. Dizeler için bellek ayrılır, baytlar kopyalanır ve bellek temizlenmez.

Kaynaklar var mı?

Geliştiriciler, bellek yöneticisine, izlediği şeye saygı duyar.

 
Vladimir Simakov :

Akan. Dizeler için bellek ayrılır, baytlar kopyalanır ve bellek temizlenmez.

Kaynaklar var mı?

Geliştiriciler, bellek yöneticisine, izlediği şeye saygı duyar.

Evet, öyle görünüyor ki kütüphanede, Deserialize class metodunda Clear() deniyor;

 virtual bool  Deserialize ( string js, int acp = CP_ACP )
{
   int i = 0 ;
   Clear ();
   CJAVal::code_page = acp;
   char arr [];
   int slen = StringToCharArray (js, arr, 0 , WHOLE_ARRAY , CJAVal::code_page);
   return Deserialize (arr, slen, i);
}

Kaynağı buradan aldım .

 
Roman :

Evet, öyle görünüyor ki kütüphanede, Deserialize class metodunda Clear() deniyor;

Kaynağı buradan aldım .

Sızıntı orada değil, büyük olasılıkla, satırı aldığınız dll'de.

 
Roman :

Evet, öyle görünüyor ki kütüphanede, Deserialize class metodunda Clear() deniyor;

Kaynağı buradan aldım .

CJVal'i nasıl yaratırsınız? belki yeni CJVal()?

Sızıntı orada değil, büyük olasılıkla, satırı aldığınız dll'de.

Terminalin bunu yakalaması pek olası değildir.
 
Vladimir Simakov :

Sızıntı orada değil, büyük olasılıkla, satırı aldığınız dll'de.

Ayrıca verileri okuyan işlevin sızdırdığı izlenimini edindim.
Önce verileri arabelleğe alır, sonra iletir, aktarımdan sonra geliştiriciye göre arabellek temizlenir.
Ama görünüşe göre bu arabelleği temizlemede bir sıkıntı var.
Ama ilginç olan, eğer betikteki dizgiyi seri durumdan çıkarmazsanız, o zaman sızıntı olmaz, yani problem betikte seriden çıkarma anında ortaya çıkar.
Sadece olası bir neden için farklı olasılıkları test ediyorum.
Ne yazık ki, lib .lib kapalı olduğundan kaynak yok