欢迎访问 外汇EA下载与MT4/MT5自动交易资源 - 聚合外汇EA、黄金EA、量化交易工具与自动化交易实战内容。
登录 注册

报告策略测试器中的内存泄漏 - MetaTrader 5 库

author emer | 456 人阅读 | 0 人评论 |

策略测试器不会报告 MQL5 应用程序(例如专家顾问、脚本或指标)的任何内存泄漏。并且使用以下方法可能会发生此类内存泄漏 新的在您的 MQL5 代码中使用运算符,并忘记稍后在代码中通过调用来释放占用的内存 删除 操作员。例如,在具有许多类和数据集合的复杂程序中,必须使用 删除 操作员很容易被监督,但此类问题很难追踪。

在我看来,策略测试器不仅应该用于开发连贯的交易逻辑,还应该用于检测与软件相关的问题。特别是对于查找内存泄漏。此类问题越早发现并解决越好。

因此,这里提供了一个名为“checker_for_memory_leaks”的包含文件。多米尼克·艾格特对此文件做出了重大贡献;请看https://www.mql5.com/en/forum/438987

该头文件可用于 Expert Advisor、脚本和自定义指标,并且应包含在代码的最开头。目的是在策略测试器中测试应用程序期间监视最终发生的内存泄漏。否则无需更改实际代码。头文件中的运算符 新的 和 删除 被“弯曲”以指示最终发生的泄漏。在彻底测试您的应用程序并修复所有内存泄漏后,您只需取消注释/删除   #include    在你的程序中声明。

作为一个例子,这里有一个非常简单的脚本,名为“内存泄漏.mq5“使用此标头显示:

#包括//+------------------------------------------------------------------+
//|没有任何内容的简单 CA 类                              |
//+------------------------------------------------------------------+
班级CA {};空白 启动时()
  {
   CA*a;
   一个=新的加州;
  如果(一个==无效的)
     {
      打印“空指针!”);
      返回;
     }// ‘忘记’调用删除操作符”
// 删除一个;  }//+------------------------------------------------------------------+

输出:

2023.0812 114526.072MemoryLeak (.DE40Cash,M15)      -- 恢复内存泄漏 --2023.0812 114526.072内存泄漏(.DE40Cash,M15)      1留下未删除的对象2023.0812 114526.072MemoryLeak (.DE40Cash,M15)        - 文件 MemoryLeak.mq5 行10
2023.0812 11:4526.072MemoryLeak (.DE40Cash,M15)      -- 简历结束 --

您可以看到内存已分配在哪个文件和哪一行。此信息应该使调试更容易找到程序中应发生内存释放的正确位置


附件下载

📎 checker_for_memory_leaks.mqh (2.27 KB)

📎 memoryleak.mq5 (0.52 KB)

Source: MQL5 #45873

🔐
请登录后参与评论
注册满12小时后评论,即可解锁附件下载
立即登录