如何避免阵列超出范围

时间:2015-09-16 21:11:00

标签: mql4 mt4

当尝试在指标缓冲区中显示长条数(假设为7000)时,有人知道如何避免错误 array out of range 吗?

2 个答案:

答案 0 :(得分:3)

虽然数组(问题)看起来相似,但存在重大差异

MQL4指标使用"其他"处理数组的机制比#"普通"数组有。

...  Testing pass stopped due to a critical error in the EA
...  array out of range in '!2015-09-08___!EA 2xAMA 01 2015-09-08_msMOD_0.00.mq4' (519,39)

是的, MT4 在尝试处理错误 ptr -> {{1}时会引发致命错误一个人必须小心谨慎 避免 这种情况,或者 trim array[aStaticSIZE](类似于低延迟循环缓冲方案)不要指向数组边界(下溢/溢出)或 扩展 ptr通过array[]以便跟上声明为动态ArrayResize()的数组上的ptr增长(直到内存允许)),然而 MQL4技术指标 还有其他情况。

限制?是。 。 。 。 。 。 (并且应该对每个New-MQL4.56789隐形更新进行审核)

double Array[];开始,您的" 普通"如果O / S内存池管理器允许,则数组不能超过 "New"-MQL4.56789-Build-840 元素,因此即使使用更高维度的映射2.147.483.647,也应该有足够的空间。

多年前,我们使用了许多并行的2D / 3D阵列来实现快速和{ 2D | 3D | 4D }(安全封装)堆/堆栈处理程序,以便在100k +行/ 2D平面的比例下维护高度动态的实体所有人都做得很好 - private

所以一些7k +元素不应该让你担心。

指标通过自动缓冲处理程序

间接使用数组

从这个意义上讲,您的代码无需关心这些问题。

MQL4

答案 1 :(得分:2)

我遇到了类似的问题,我的缓冲区总是出现“Array out of range”错误。我使用 ArraySize() 进行了检查,返回 0

最后,我忘了在指标的 SetIndexBuffer(...) 中为此缓冲区数组打电话 onInit() {...} 。< / p>

由于我使用的内部缓冲区没有绘制线条,我使用 IndicatorBuffers() 函数先增加缓冲区数量,然后使用 {{1}注册我的附加缓冲区}}

SetIndexBuffer(...)