以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://www.weistock.com/bbs/index.asp)
--  金字塔软件问题提交  (http://www.weistock.com/bbs/list.asp?boardid=2)
----  setubound(X,0) 没有清除数组内容  (http://www.weistock.com/bbs/dispbbs.asp?boardid=2&id=161991)

--  作者:a141027
--  发布时间:2018/3/12 9:55:22
--  setubound(X,0) 没有清除数组内容

如题,请见图。

 


图片点击可在新窗口打开查看此主题相关图片如下:20180312_093640_new.png
图片点击可在新窗口打开查看

请问为什么?谢谢。


--  作者:a141027
--  发布时间:2018/3/12 10:04:39
--  

我把代码贴出来。

 

variable:test[]=0;

setubound(test,3);
test[1]:=1;
test[2]:=2;
test[3]:=3;
setubound(test,0);
setubound(test,3);
check:valid(test[1]),nodraw,colorwhite;
t1:test[1],nodraw,colorwhite;
t2:test[2],nodraw,colorwhite;
t3:test[3],nodraw,colorwhite;


--  作者:gxx978
--  发布时间:2018/3/12 10:16:47
--  
该问题已知晓,后续会提交此问题,抱歉,感谢对金字塔的支持。
--  作者:a141027
--  发布时间:2018/3/12 10:33:15
--  

好的,我暂时用循环语句把数组逐项清零,也可以解决问题,不过效率应该会降低。


--  作者:无为剑
--  发布时间:2018/3/12 13:05:26
--  

目前在序列模式下测试确实有点问题。但是在逐K线模式下测试是没有问题的。

请空数组并不能真正从内存除去,为了减小内存碎片,数组存放的内存是不会随意改变的,只是告知数组管理模块这个数组已经被清空,此时数组的下标已经被置为0,好为后面的数组插入做准备。

 

variable:test[]=0;

setubound(test,3);
test[1]:=1;
test[2]:=2;
test[3]:=3;
setubound(test,0);

dd:UBOUND(test),nodraw;

 

在逐K线模式下,通过打印dd变量你就能看出数组的下标已经被清空了,从编程的合理性角度考虑,数组使用前你应该使用UBOUND先判断数组大小,而不是直接暴力使用数组下标来访问数组内容


--  作者:无为剑
--  发布时间:2018/3/12 13:25:08
--  
下个版本我们会增加一个数组初始化函数来解决你遇到的问题
--  作者:a141027
--  发布时间:2018/3/12 15:09:56
--  
 谢谢回复。那真的需要一个初始化数组的函数,否则每次都要逐个数组重新写零,效率就太低了。