错误、漏洞、问题 - 页 2488 1...248124822483248424852486248724882489249024912492249324942495...3184 新评论 Igor Makanu 2019.06.21 03:21 #24871 当然我可能是错的,但似乎2个月前我的模板还在工作,而现在当我调用CList析构器时,没有被销毁的对象 仍然留在内存中,代码。 #property strict #include <Arrays\List.mqh> //+------------------------------------------------------------------+ class CData : public CObject { public: int x; double y; CData(){}; CData(int ival,double dval){x=ival;y=dval;} }; //+------------------------------------------------------------------+ template<typename T>class CDataBase { private: CList *mlist; T *Tptr; public: void CDataBase() { mlist=new CList; } void ~CDataBase(void) { delete mlist; } int ArraySize(void) { return(mlist.Total()); } T *operator[](int index) { return(mlist.GetNodeAtIndex(index)); } void AddValue (T &value) { Tptr = new T; Tptr = value; mlist.Add(Tptr); } string TypeName() { return(typename(T)); } }; //+------------------------------------------------------------------+ void OnStart() { CDataBase<CData>*data=new CDataBase<CData>; int i; for(i=0; i<5; i++) { data.AddValue(new CData(i,i*2.0)); } for(i=0; i<data.ArraySize(); i++) { Print(i," : ",data[i].x," , ",data[i].y); } Print(data.TypeName()); delete data; } //+------------------------------------------------------------------+ 2019.06.21 07:19:45.926 tstlist (EURUSD,H1) 0 : 0 , 0.0 2019.06.21 07:19:45.926 tstlist (EURUSD,H1) 1 : 1 , 2.0 2019.06.21 07:19:45.926 tstlist (EURUSD,H1) 2 : 2 , 4.0 2019.06.21 07:19:45.926 tstlist (EURUSD,H1) 3 : 3 , 6.0 2019.06.21 07:19:45.926 tstlist (EURUSD,H1) 4 : 4 , 8.0 2019.06.21 07:19:45.926 tstlist (EURUSD,H1) CData 2019.06.21 07:19:45.926 tstlist (EURUSD,H1) 剩余5个未删除对象 2019.06.21 07:19:45.926 tstlist (EURUSD,H1) 剩下5个CData类型的对象 2019.06.21 07:19:45.926 tstlist (EURUSD,H1) 280字节的泄漏的内存 MT5 build 2085 fxsaber 2019.06.21 09:18 #24872 Igor Makanu: 当然我可能是错的,但似乎2个月前我的模板还在工作,但现在当我调用CList析构器时,没有被销毁的对象 仍然留在内存中,代码。 #property strict #include <Arrays\List.mqh> //+------------------------------------------------------------------+ class CData : public CObject { public: int x; double y; CData(){}; CData(int ival,double dval){x=ival;y=dval;} }; //+------------------------------------------------------------------+ template<typename T>class CDataBase { private: CList *mlist; T Tptr; public: void CDataBase() { mlist=new CList; } void ~CDataBase(void) { delete mlist; } int ArraySize(void) { return(mlist.Total()); } T operator[](int index) { return(mlist.GetNodeAtIndex(index)); } void AddValue (T &value) { Tptr = value; mlist.Add(Tptr); } string TypeName() { return(typename(T)); } }; //+------------------------------------------------------------------+ void OnStart() { CDataBase<CData*>* data=new CDataBase<CData*>; int i; for(i=0; i<5; i++) { CData* Tmp = new CData(i,i*2.0); data.AddValue(Tmp); } for(i=0; i<data.ArraySize(); i++) { Print(i," : ",data[i].x," , ",data[i].y); } Print(data.TypeName()); delete data; } //+------------------------------------------------------------------+ Igor Makanu 2019.06.21 10:03 #24873 fxsaber: 是的,你可能是对的,你的例子工作得很正确,在某处我把我的来源中的测试例子弄混了 谢谢你! Vladimir Pastushak 2019.06.23 10:08 #24874 Вероника Сорокина: 下午好。情况是这样的。我写的mql4专家顾问/脚本/指标/什么的都不附在图表窗口上,我希望它能一直附在一个程序上......比如,我将写一个有用的东西,我不希望它一直附在新打开的图表上。类似服务的东西(来自MT5),但你在MT4上需要它。 使用服务 fxsaber 2019.06.24 14:32 #24875 是否有可能将ME的当前代码添加到终端的收藏夹中? 实际上,我希望有一个单独的 "调试 "选项卡,在那里我可以添加目前正在编写和测试的代码。 现在发现,为了方便工作,有必要建立一个单独的终端,在那里不涉及当前项目 的一切。 那么调试就更快了,因为在终端本身没有与其他代码混淆。 [删除] 2019.06.28 08:40 #24876 亲爱的开发者。请澄清,指标缓冲区的自动重新划分是否正常?我所说的重新分区是指:窗口的最大条数,例如5000。缓冲区大小+速率_总数在达到6439时被重置为5000。当窗口中最大条数=10000时,也会发生同样的情况。复位发生在11439。 由于这个原因,指标可能会崩溃并显示不正确的数据。 建立2085年。我从2000年左右开始注意到这种行为。 Slava 2019.06.28 13:58 #24877 Alexey Kozitsyn: 亲爱的开发者。请澄清,指标缓冲区的自动重新划分是否正常?我所说的重新分区是指:窗口的最大条数,例如5000。缓冲区大小+ rates_total在达到6439时被重置为5000。 当窗口中最大条数=10000时,也会发生同样的情况。复位发生在11439。 由于这个原因,指标可能会崩溃并显示不正确的数据。 建立2085年。我从2000年左右开始注意到这种行为。 这种行为最初是在五。 举例说明由于缓冲区重新分配导致的指标崩溃 [删除] 2019.06.28 16:41 #24878 Slava: 这就是 "五 "的行为,从一开始就如此。 举例说明由于缓冲区的重新分配而导致的指标崩溃 所以你是在确认,当有累计超过1439条的时候,终端必须将缓冲区大小重置为窗口中最大条数的值?如果是的话,应该在文件中提到这一点。因为这是不可预见的行为。 关于这个例子。我指的是与条形数字一起工作的定制开发。也就是说,我记住了6438号条形图,2分钟后(M1 TF)缓冲区被重新分配,我走出了阵列。现在很明显,这是 "标准 "行为。请更新文件。 A100 2019.06.29 15:08 #24879 执行过程中出错。 class A { public: virtual void f( int = 0 ) { Print( 1 ); } }; class B : public A { public: virtual void f( int ) { Print( 2 ); } }; void OnStart() { B b; b.f(); } 结果 : 1 预期:2或(如C++) - 编译错误 Slava 2019.06.29 16:13 #24880 Alexey Kozitsyn: 请更新文件。 哪里需要更新文件? 一个酒吧的明确标识一直是酒吧的时间,而不是酒吧的编号。 如果有人对你的图表调用ChartSetSymbolPeriod,你会很容易捕捉到条数的变化。惊喜吗? 顺便说一下,在OnCalculate中有一个参数rate_total。 1...248124822483248424852486248724882489249024912492249324942495...3184 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
当然我可能是错的,但似乎2个月前我的模板还在工作,而现在当我调用CList析构器时,没有被销毁的对象 仍然留在内存中,代码。
2019.06.21 07:19:45.926 tstlist (EURUSD,H1) 0 : 0 , 0.0
2019.06.21 07:19:45.926 tstlist (EURUSD,H1) 1 : 1 , 2.0
2019.06.21 07:19:45.926 tstlist (EURUSD,H1) 2 : 2 , 4.0
2019.06.21 07:19:45.926 tstlist (EURUSD,H1) 3 : 3 , 6.0
2019.06.21 07:19:45.926 tstlist (EURUSD,H1) 4 : 4 , 8.0
2019.06.21 07:19:45.926 tstlist (EURUSD,H1) CData
2019.06.21 07:19:45.926 tstlist (EURUSD,H1) 剩余5个未删除对象
2019.06.21 07:19:45.926 tstlist (EURUSD,H1) 剩下5个CData类型的对象
2019.06.21 07:19:45.926 tstlist (EURUSD,H1) 280字节的泄漏的内存
当然我可能是错的,但似乎2个月前我的模板还在工作,但现在当我调用CList析构器时,没有被销毁的对象 仍然留在内存中,代码。
是的,你可能是对的,你的例子工作得很正确,在某处我把我的来源中的测试例子弄混了
谢谢你!
下午好。情况是这样的。我写的mql4专家顾问/脚本/指标/什么的都不附在图表窗口上,我希望它能一直附在一个程序上......比如,我将写一个有用的东西,我不希望它一直附在新打开的图表上。类似服务的东西(来自MT5),但你在MT4上需要它。
使用服务
是否有可能将ME的当前代码添加到终端的收藏夹中?
实际上,我希望有一个单独的 "调试 "选项卡,在那里我可以添加目前正在编写和测试的代码。
现在发现,为了方便工作,有必要建立一个单独的终端,在那里不涉及当前项目 的一切。
那么调试就更快了,因为在终端本身没有与其他代码混淆。
亲爱的开发者。请澄清,指标缓冲区的自动重新划分是否正常?我所说的重新分区是指:窗口的最大条数,例如5000。缓冲区大小+速率_总数在达到6439时被重置为5000。当窗口中最大条数=10000时,也会发生同样的情况。复位发生在11439。
由于这个原因,指标可能会崩溃并显示不正确的数据。
建立2085年。我从2000年左右开始注意到这种行为。
亲爱的开发者。请澄清,指标缓冲区的自动重新划分是否正常?我所说的重新分区是指:窗口的最大条数,例如5000。缓冲区大小+ rates_total在达到6439时被重置为5000。 当窗口中最大条数=10000时,也会发生同样的情况。复位发生在11439。
由于这个原因,指标可能会崩溃并显示不正确的数据。
建立2085年。我从2000年左右开始注意到这种行为。
这种行为最初是在五。
举例说明由于缓冲区重新分配导致的指标崩溃
这就是 "五 "的行为,从一开始就如此。
举例说明由于缓冲区的重新分配而导致的指标崩溃
所以你是在确认,当有累计超过1439条的时候,终端必须将缓冲区大小重置为窗口中最大条数的值?如果是的话,应该在文件中提到这一点。因为这是不可预见的行为。
关于这个例子。我指的是与条形数字一起工作的定制开发。也就是说,我记住了6438号条形图,2分钟后(M1 TF)缓冲区被重新分配,我走出了阵列。现在很明显,这是 "标准 "行为。请更新文件。
执行过程中出错。
结果 : 1
预期:2或(如C++) - 编译错误
请更新文件。
哪里需要更新文件?
一个酒吧的明确标识一直是酒吧的时间,而不是酒吧的编号。
如果有人对你的图表调用ChartSetSymbolPeriod,你会很容易捕捉到条数的变化。惊喜吗?
顺便说一下,在OnCalculate中有一个参数rate_total。