【问题标题】:'Out of stack space' exception in for loop in vb6vb6中for循环中的“堆栈空间不足”异常
【发布时间】:2017-04-04 23:52:33
【问题描述】:
4           For i = 1 To mcolHistory.Count
5           gobjCommand.Command.Parameters("UID").Value = mcolHistory(i)
6           gobjCommand.Command.Execute
7           Next i         
  1. gobjCommand 是一个 ADODB 命令对象。

  2. mcolHistory 是 UID 的集合。

  3. 存储过程已设置在其他块中。

  4. 包含“for 循环”的函数应该被调用 300-350 次。每次调用该函数时,也会执行“for 循环”。 'mcolHistory.Count' 的值大约在 1 到 100 之间变化。
  5. 第 5 行和第 6 行应该被调用很多次。存储过程运行了很多次。
  6. 第 5 行在一定时间后抛出错误“堆栈空间不足”,应用程序崩溃。

请告诉我可能导致此错误的原因?以及如何解决这个问题?*

【问题讨论】:

  • ADODB Command 对象没有Command 属性(比较MSDN)。所以无论gobjCommand 是什么,它都不是ADODB Command 对象。
  • 话虽如此,设置命令参数值不太可能使您耗尽堆栈空间。 ADODB 导致问题的假设很可能是错误的。更有可能是您的编程错误在您未显示的代码中的某个地方。

标签: sql stored-procedures vb6 adodb vb6-migration


【解决方案1】:

我猜你的问题在上面的代码中是看不到的。

'Out of stack' 真正指向一个无限循环的执行调用方法,直到堆栈已满。

检查 mcolHistory.Count 是否太大,如果不是,检查您是否在递归调用某些东西。

【讨论】:

  • 通常for循环不会填满堆栈空间,不管有多少次迭代。无休止的递归似乎是更可能的原因。
  • 我支持您的评论,真的不太可能(理论上可能)for 循环大小填满堆栈空间,并且某处的递归应该是其中的一部分。
猜你喜欢
  • 1970-01-01
  • 2023-03-08
  • 2016-01-20
  • 1970-01-01
  • 1970-01-01
  • 2021-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多