错误、漏洞、问题 - 页 650

 
Rosh:
写信给服务台,说明所有细节(必要时附上专家)。这将会更快。
好的。我今天肯定会这样做。但为了总体发展,我还是要问你几个问题。:)
mql5:
你可能正在使用大尺寸的局部函数变量,例如数组。
在下一次构建中,对于32位终端,你可以用相应的编译器属性#property stacksize 来控制堆栈大小。

这是否是一个只有32位终端的问题?我有x64。如何理解"......局部函数变量的大尺寸,例如数组......"?"它应该有多大才能使堆栈最后被溢出?
 
tol64:
这是否只是32位终端的问题?我有x64。如何理解"......大尺寸的局部 函数变量,比如说数组...... "呢?"? 多大的堆栈才会最终溢出来?
不,这不仅仅是一个32位终端的问题。但32位终端的解决方案目前已经准备就绪,而在64位终端中,它仍然受到256Kb堆栈限制的影响。
但如果程序员没有使用属性手动指定所需的堆栈大小,终端中的EX5将以默认的堆栈大小(256Kb)工作。

关于大尺寸。
函数内部的每个变量声明(静态变量除外)都会在堆栈上分配空间,而为局部变量分配堆栈空间则发生在每次调用时。

因此,如果一个函数有64Kb的局部变量,堆栈空间足够3次调用,堆栈溢出发生在4次调用时(因为堆栈的一部分被用于终端的内部需要)。因此,如果需要大量的本地数据,最好使用动态内存--当你进入函数时,本地需要的内存在系统中被分配(new, ArrayResize),当你退出函数时,内存被删除(delete, ArrayFree)。
 

你好!

我无法理解这个问题。

filehandle=FileOpen("My\\Symbols.txt",FILE_READ|FILE_TXT|FILE_ANSI);

它在调试中运行良好,文件在MT5/MQL5/File/中可读。

当在测试器中运行时,它显示 "Symbols.txt文件无法打开,错误5004 "和Handel -1

我也把它塞进了MT5\tester\agent000\MQL5\File文件夹,但它没有再看到它,根本就把那里的文件杀死了)。

同时,描述说。

"文件在客户终端的子文件夹MQL5\files(或在测试的情况下文件夹_agent_testing/MQL5\files)中打开"。

"该函数在本地文件夹(MQL5\Files或MQL5\Tester\Files在测试的情况下)中搜索一个文件。"

我没有 "MQL5\Tester\Files "文件夹,就像帮助中说的那样?

我做错了什么,如何才能克服这个问题?

谢谢你的答复。

 

试着使用#property tester_file

#property tester_file "My\\Symbols.txt"
 
Rosh:

试着使用#property tester_file

Ugh-uh-x它似乎有助于在MT5\tester\agent000\MQL5\File中再次投入,然后它与财产的 工作。

谢谢你!

 
Fia:

再试了一下测试器,手柄-1,错误5004。

我不知道还能是什么原因,它显然找不到文件,但在调试时可以看到一切。

将文件复制到MQL5/Tester/Files(事先创建一个文件夹)。
Документация по MQL5: Файловые операции / FolderCreate
Документация по MQL5: Файловые операции / FolderCreate
  • www.mql5.com
Файловые операции / FolderCreate - Документация по MQL5
 
uncleVic:
将文件复制到MQL5/Tester/Files(事先创建一个文件夹)。

我试过了,手动创建了这样的文件夹,把我的文件(带子文件夹,禁用#属性tester_file),它在测试器中无论如何也找不到。

而如果你连接#property tester_file,工作起来就很奇怪了。

然而,他不时地在MT5/tester/agent000/MQL5/File中崩溃一个文件夹和一个文件,可能是因为如果你禁用#property tester_file,他就会在那里破解一切。

是的,我现在发现,如果我改变了mq5文件中的代码(任何地方)(txt是从该文件中调用的),然后编译并进入测试器,它会破解MT5\tester\agent000\MQL5\File中的所有内容。

这是一个奇迹,但至少它是有效的--这很好。

 
Fia:

我试过了,手动创建了这样的文件夹,把我的文件(带子文件夹,禁用#属性tester_file),它在测试器中无论如何也找不到。

而如果你连接#property tester_file,那么奇怪的是,它可以工作。

然而,他不时地在MT5/tester/agent000/MQL5/File中崩溃一个文件夹和一个文件,可能是因为如果你禁用#property tester_file,他就会在那里破解一切。

是的,现在我发现,如果我改变了mq5文件中的代码(任何地方)(txt是从该文件中调用的),然后编译并进入测试器,它会破解MT5\tester\agent000\MQL5\File中的所有内容。

这是一个奇迹,但至少它是有效的,这很好。

如果是W7,把文件放在Document and Setting/.../MetaQuotes/Common/Files目录下,或者禁用UAC。

PS再次检查名字拼写的正确性,名字写在什么版面上(最好是复印件),名字后面是否有空格等等。

 
Urain:

如果是W7,把文件放在Document and Setting/.../MetaQuotes/Common/Files中,或者禁用UAC。

PS再次检查名字拼写的正确性,名字写在哪个版面上(最好是复制),名字后面是否有空格等等。

真的,我有Win7 64bit,但UAC是零。

C:\Documents and Settings\All Users\MetaQuotes\Terminal\Common\Files\我把我的文件夹和文件放在那里,没有帮助,在测试器中没有找到文件。

是的,我认为所有的名字都是正确的,在#property tester_file 的测试中可以工作(在调试中也可以工作),但在测试中没有办法,只能通过#property tester_file

而且有了上面提到的改变和编译mq5后杀死文件的问题(我有这样一个布局)。

 

你的帮助中写着一个公然的谎言。

CLBufferWrite

将一个数组写到OpenCL缓冲区。

CLBufferWrite(
intbuffer//到OpenCL缓冲区的手柄
const void&data[]// 数组的值
uintoffset=0//从哪个元素开始,默认是从第一个元素开始
voidsize=WHOLE_ARRAY//数值的数量, 默认为整个数组
);

参数

......

补偿

.....

尺寸

[in] 要写入的 的数量。默认情况下,数组的所有 都被写入OpenCL缓冲区。

......

它实际上写的是字节数(!!),根本不是数值。

我花了两个晚上来调试这个指标,直到我把它弄明白!"。为什么呢?- 因为我相信你的写作...

:))

//没能及时发现,因为默认的( size=WHOLE_ARRAY)工作正常。