什么原因导致mql4中的堆栈溢出错误?

 

什么原因导致mql4在编译时出现堆栈溢出错误?我怀疑是使用一个函数来创建对象。下面是已经被调用了一百多次来创建对象的函数。

int ObCreate(string ObName,double Xdist,double Ydist,double Zoom)
 {
 
   ObjectCreate(ObName, OBJ_LABEL, 0, 0, 0);  // Creating obj.
   ObjectSet(ObName, OBJPROP_CORNER, 0);    // Reference corner
   ObjectSet(ObName, OBJPROP_XDISTANCE, Xdist*ZoomTimes);// X coordinate   
   ObjectSet(ObName, OBJPROP_YDISTANCE, ZoomTimes*Ydist);// Y coordinate
 return(0);
 }

下面是一个使用例子

   ObCreate("EURUSD",Column1x,15,ZoomTimes);

我以正常的方式创建了其他相同数量的对象,没有得到这个错误,但是当我引入并使用这个函数来创建其余的对象时,错误就出现了。请看下面的例子,虽然它的对象数量更多,但却没有出现这个错误。

   ObjectCreate("EURUSD", OBJ_LABEL, 0, 0, 0);  // Creating obj.
   ObjectSet("EURUSD", OBJPROP_CORNER, 0);    // Reference corner
   ObjectSet("EURUSD", OBJPROP_XDISTANCE, Column1x*ZoomTimes);// X coordinate   
   ObjectSet("EURUSD", OBJPROP_YDISTANCE, ZoomTimes*15);// Y coordinate
 
tonny:

什么原因导致mql4中的堆栈溢出错误?我怀疑是使用一个函数来创建对象。下面是已经被调用了一百多次来创建对象的函数。

下面是一个使用例子

我以正常的方式创建了其他相同数量的对象,没有得到这个错误,但是当我引入并使用这个函数来创建其余的对象时,错误就出现了。请看下面的例子,虽然它的对象数量更多,但却没有出现这个错误。

我从来没有遇到过堆栈溢出,从我所读到的内容来看,它们通常是由递归引起的,但我在你发布的代码中没有看到这一点 ...... 为什么你的函数类型是int? 当你不使用它时,传递变量double zoom有什么意义?

还有一件事,OBJPROP_XDISTANCE和OBJPROP_YDISTANCE 的值应该是int 而不是double
 
RaptorUK:
我从来没有遇到过堆栈溢出,从我所读到的内容来看,它们通常是由递归引起的,但我在你发布的代码中没有看到......为什么你的函数类型是int? 当你不使用它时,传递变量double zoom有什么意义?

还有一件事,OBJPROP_XDISTANCE和OBJPROP_YDISTANCE 的值应该是int 而不是double


这也是我的困惑。

RaptorUK:
我从来没有遇到过堆栈溢出,从我所读到的内容来看,它们通常是由递归引起的,但我在你发布的代码中没有看到......为什么你的函数类型是int? 当你不使用它时,传递变量double zoom有什么意义

还有一件事,OBJPROP_XDISTANCE和OBJPROP_YDISTANCE 的值应该是int 而不是double

我做了一些查找和替换工作,但我还没有纠正指标的下半部分。

RaptorUK:
我从来没有遇到过堆栈溢出,从我所读到的内容来看,它们通常是由递归引起的,但我在你发布的代码中没有看到......为什么你的函数类型是int? 当你不使用它时,传递变量double zoom有什么意义?

还有一件事,OBJPROP_XDISTANCE和OBJPROP_YDISTANCE 的值应该是int 而不是double

请阅读更多关于ObjectSet()的 书。等等,让我来帮忙。下面是一个摘录。

bool ObjectSet( string name, int index, double value)
 
tonny:


老兄,请多读些关于ObjectSet() 的书。等等,让我帮你。下面是一个摘录。

我看看你的报价,然后用这个给你加价 . . .

objprop_xdistance102int用于设置/获取锚点X距离对象属性的整数,单位为像素。
锚点距离103整数整数,用于设置/获取锚点的Y距离属性,单位为像素。

你会用双数来表示吗?

OBJPROP_BACK9bool布尔值,用于设置/获取对象的背景绘制标志。
OBJPROP_RAY10布尔值布尔值,用于设置/获取对象的射线标志。
Objprop_ellipse11bool布尔值,用于设置/获取菲波弧的椭圆标志。


 
tonny:我真的迷失在你的期望中了。我在编译过程中也没有得到"堆栈 溢出 "的错误。你能不能给我们准确的指导,我们应该如何重现这个问题?
 
Ovo:
tonny:我真的迷失在你的期望中了。我在编译过程中也没有得到 "堆栈溢出 "的错误。你能给我们准确的指导,我们应该如何重现这个问题吗?
你是如何试图重现它的?以上只是我说的代码的一部分,我已经清楚地调用了这个函数 一百多次,所以如果你想重现它,你可能想模拟这个函数的108次调用。
 
RaptorUK:

我将看到你的报价,并向你提出这个问题......。

你会用双倍数来做这些吗?

在我所做的事情中,这没有什么区别,它比我在这里发布的一点信息要多。
 
tonny:
在我所做的事情中,它没有任何区别,它比我在这里发布的一点内容要多。
如果你不想贴出所有的代码,这样就可以重现这个错误,请贴出一些可以重现相同错误的完整代码。
 
RaptorUK:
如果你不想贴出所有的代码,这样就可以重现这个错误,请贴出一些可以重现同样错误的完整代码。

好的。
 

我做了一个实验,替换了一些这样的对象

ObjectCreate("EURUSD", OBJ_LABEL, 0, 0, 0);  // Creating obj.
   ObjectSet("EURUSD", OBJPROP_CORNER, 0);    // Reference corner
   ObjectSet("EURUSD", OBJPROP_XDISTANCE, Column1x*ZoomTimes);// X coordinate   
   ObjectSet("EURUSD", OBJPROP_YDISTANCE, ZoomTimes*15);// Y coordinate

并使用下面的函数 样式,错误就消失了。好像IDE能接受的上面的东西比下面的少。我试着用下面的样式替换上面的所有样式,看看是否会出现其他问题。

ObCreate("EURUSD",Column1x,15,ZoomTimes);
 
我在这里附上产生错误的脚本和不产生错误的中和版本。也许有人会得到不同的解决方案。这是个大错误。
附加的文件: