递归有深度,堆栈会溢出。

 

堆栈空间溢出(错误 28

      

堆栈是内存的一个工作区,会随着程序运行的需要而增长或缩小。此错误有以下的原因和解决方法:

  • 有太多活动的 FunctionSub Property 过程调用。

    检查过程的嵌套是否太深,尤其是递归过程,即自己调用自己的过程。确保递归能终止,使用 “调用” 对话框来查看活动的过程 (在堆栈上)。

  • 本地变量需要更多可用的本地变量空间。

    试着在模块级别中声明某些变量。可以在静态过程,即在 PropertySub Function 关键字前加上 Static,声明所有变量,或可以在过程内使用 Static 语句来声明各个 Static 变量。

  • 有太多定长字符串。

    定长字符串在过程中可快速访问,比可变长度字符串使用更多堆栈空间,因为字符串数据本身要放在堆栈上。可试着重新定义一些定长字符串成为变长字符串。当声明一变长字符串时,只有字符串描述符 (非数据本身) 会放在堆栈上。可以在没有堆栈空间的模块层次上定义字符串。在模块层次申明变量是缺省为 Public,所以在模块上所有过程皆可见到字符串。

  • DoEvents 函数调用的嵌套太多。

    利用“调用” 对话框,在堆栈上查看正在活动的过程。

  • 代码引起了事件层叠。

    所谓事件层叠就是引起一个事件,此事件会调用已在堆栈上的事件过程。事件层叠和不能中止的递归过程调用是相似的,但不太明显,因为是由 Visual Basic 所调用,而不是在代码中调用。使用“调用” 对话框来查看那些正在活动的过程 (在堆栈上)。

显示“调用” 对话框,在“调试” 窗口中选取过程框右边的“调用”按钮或选择“调用” 命令。详细信息,可选取有问题的项目,并按下 F1 键。

 

 

可以采用在调试过程中打断点,后查看调用堆栈。

这样就可以查看到堆栈中调用的过程和函数,就可以调整程序的策略流程。避免错误“28”堆栈空间溢出

 

 

                  作者:段利庆  QQ:14035344

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值