错误、漏洞、问题 - 页 2571

 
脚本完成后,专家日志的警告是什么意思?
2 leaked strings left

如何才能解决这个问题?
翻译员翻译,左边有两个泄露的字符串。但这并不清楚,在什么的左边,字符串?

该脚本使用JAson 库。
通过memcpy_s从dll收到一个Json字符串,在dll中这个字符串的类型是 const wchar_t*
在导出函数的#import参数中,声明为string& str,即通过引用,而string本身声明为string str。
然后字符串str被反序列化

js.Deserialize(str); 

问题正是从memcpy_s传入的字符串的反序列化。

因为如果你在脚本中创建一个json检查字符串

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

那么警告信息就不会出现。
从dll中反序列化一个字符串,脚本完成后又出现警告信息,还剩2个泄漏的字符串

我尝试将字符串转换为char数组StringToCharArray,并反序列化char数组。
但问题仍然存在,出现了2个泄漏的字符串。
这方面的原因可能是什么?

 
从dll中,我试着明确传递检查json字符串
L"{\"s\":\"1000\"}"
剩余2个泄漏字符串警告已经消失了
结果发现,dll中一个读取网络数据的函数导致了这种行为。

但我不明白
剩下的2条漏网 之鱼的解释,它到底是什么意思,在哪里进一步挖掘
 
Roman:
从dll中,我试着明确传递检查json字符串
剩下的2个泄漏字符串警告已经消失了
事实证明,dll中读取网络数据的功能导致了这种行为。

但我不明白
剩下的2条漏网 之鱼的解释,它到底是什么意思,要在哪里进一步挖掘?

如果松散地翻译,那么。"2行导致内存泄漏"。

从字面上看,它的意思大约是:目前还剩下2根琴弦。

 

在最新的mt4测试版中,iHigh,iTime功能 对日线以上的框架不起作用。

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


 
Artyom Trishkin:

如果松散地翻译,那么。"2行导致内存泄漏"。

而从字面上看,是这样的:剩下2条电流线。

有趣的是,当我得到一个Json字符串,并且不对其进行反序列化,而是将其原封不动地输出到注释中,就不会有任何泄漏。
当我开始反序列化以获得Json字符串元素时,它开始泄漏。
目前还不清楚,图书馆是否漏水...

 
Roman:

有趣的是,当我得到一个Json字符串,并且不对其进行反序列化,而是将其原封不动地输出到注释中时,就不会出现泄漏。
当我开始反序列化以获得Json字符串元素时,它开始泄漏。
我不知道图书馆是否在漏水...

它在漏水。字符串的内存 被分配,字节被复制,但内存没有被清空。

有源代码吗?

赞扬开发者的内存管理器,以保持对这一点的跟踪。

 
Vladimir Simakov:

它正在漏水。字符串的内存被分配,字节被复制,但内存没有被清空。

你有源代码吗?

赞扬开发者的内存管理器,它能保持对这一点的跟踪。

该库似乎在Deserialize类方法中调用Clear()。

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);
}

我从这里得到了 源代码。

 
Roman:

该库在Deserialize类方法中调用Clear()。

源代码取自这里

漏洞不在那里,但很可能在那个dll中,你从那里得到了字符串。

 
Roman:

看起来在库中,在Deserialize类的方法中,Clear()被调用。

我从这里得到了 源代码。

你如何创建CJVal? 可能是新的CJVal()?

漏洞不在那里,但很可能在那个dll中,你从那里得到了字符串。

终端不太可能捕捉到这一点。
 
Vladimir Simakov:

漏洞不在这里,而很可能是在你获取字符串的dll中。

我还有一个印象,就是读取数据的函数在泄露。
据lib开发者称,它首先对数据进行缓冲,然后进行传输,传输完毕后,缓冲区被清空。
但似乎在缓冲区清理方面有一个错误。
但有趣的是,如果我们不在脚本中反序列化字符串,就不会有泄漏,也就是说,问题发生在脚本中反序列化的那一刻。
只是检查可能的原因的不同变体。
不幸的是,没有源代码,因为.lib已经关闭。