是Error 28 - "Out of stack space"
的最可能原因吗?错误一个无限或非常深的递归,它使用了太多的堆栈内存?
其他可能的原因是什么?
最佳答案
您的错误描述在 here在 MSDN 中。
注:这篇 MSDN 文章与 Visual Studio 2005 相关。但很可能会说 VB6 也有同样的限制。
[更新]
您可以在 here 上找到 Visual Studio 6 (VB6) 文章。 .
检查过程没有嵌套太深。对于递归过程尤其如此,即调用自身的过程。确保递归过程正确终止。使用调用对话框查看哪些过程是事件的(在堆栈上)。
尝试在模块级别声明一些变量。您还可以通过在 Property、Sub 或 Function 关键字前加上 Static 来声明过程中的所有变量。或者,您可以使用静态语句在过程中声明各个静态变量。
过程中的固定长度字符串访问速度更快,但比可变长度字符串使用更多的堆栈空间,因为字符串数据本身放在堆栈上。尝试将一些固定长度的字符串重新定义为可变长度的字符串。在过程中声明可变长度字符串时,只有字符串描述符(而不是数据本身)放在堆栈上。您还可以在不需要堆栈空间的模块级别定义字符串。在模块级别声明的变量默认是公共(public)的,因此该字符串对模块中的所有过程都是可见的。
使用“调用”对话框查看堆栈中哪些过程处于事件状态。
事件级联是由触发一个调用已经在堆栈上的事件过程的事件引起的。事件级联类似于未终止的递归过程调用,但不太明显,因为调用是由 Visual Basic 进行的,而不是通过代码中的显式调用。使用调用对话框查看哪些过程是事件的(在堆栈上)。
关于vb6 - VB6 中 "Out of stack space"的可能原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9920364/