堆栈空间溢出怎么解决?

programfish 2009-02-10 09:59:11
我循环调用一个自定义函数计算数值然后加入到MSFlexGrid中,有可能要计算上万次,结果出现了“堆栈空间溢出”的问题,请问该如何实现计算几万次呢。
...全文
914 20 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
programfish 2009-02-10
  • 打赏
  • 举报
回复
中间就是一大段数值的计算。
jhone99 2009-02-10
  • 打赏
  • 举报
回复
要看你的具体代码
programfish 2009-02-10
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 jhone99 的回复:]
在pdqx函数内部注意释放应该可以
[/Quote]
如何内部释放呢?
jhone99 2009-02-10
  • 打赏
  • 举报
回复
在pdqx函数内部注意释放应该可以
programfish 2009-02-10
  • 打赏
  • 举报
回复
谢谢,我先试试看。
m60a1 2009-02-10
  • 打赏
  • 举报
回复
知道了,现在我临时只想到个笨办法你可以试一下

写一个函数,函数内容就是你的for循环
将for循环中maxData进行处理
dim intGroupTemp as intger : intGroupTemp=1000
GOON:
if (maxData-intGroupTemp)<1000 then
function(这是个for循环函数)
exit function
else
function(这是个for循环函数)
doevents
maxData=maxData-1000
goto GOON
end if

这个办法笨了点,暂时只想出来这个办法,我手写的有写得不规范的地方自己改下
chenhui530 2009-02-10
  • 打赏
  • 举报
回复
IFLY
当我没来过这帖
programfish 2009-02-10
  • 打赏
  • 举报
回复
Public Sub pdqx(ByVal lc As Double, ByVal jd As Double, ByVal jl As Double) '计算坐标
Dim s As Double
Dim o As Double
Dim j As Double

Dim tempH As Double
Dim tempR As Double

Dim t As Double
Dim z As Double
Dim tzi As Integer
Dim cx As Double
Dim cy As Double
Dim cJD As Double
Dim cJL As Double
Dim fyQxfwj As Double
```````````````
end sub
chenhui530 2009-02-10
  • 打赏
  • 举报
回复
你的变量声明
programfish 2009-02-10
  • 打赏
  • 举报
回复
Public Sub pdqx(ByVal lc As Double, ByVal jd As Double, ByVal jl As Double)
chenhui530 2009-02-10
  • 打赏
  • 举报
回复
把声明弄出来吧
programfish 2009-02-10
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 m60a1 的回复:]
pdqx这函数做什么用的
[/Quote]
用来计算 MsfgFs.TextMatrix(rowIndex, 1) = fx
MsfgFs.TextMatrix(rowIndex, 2) = Fy
MsfgFs.TextMatrix(rowIndex, 3) = fslc
MsfgFs.TextMatrix(rowIndex, 4) = fspj
几个数值的
m60a1 2009-02-10
  • 打赏
  • 举报
回复
pdqx这函数做什么用的
programfish 2009-02-10
  • 打赏
  • 举报
回复
就是比较大,如何解决呢。
m60a1 2009-02-10
  • 打赏
  • 举报
回复
For i = 0 To maxDate
fx = fsx(i)
Fy = fsy(i)

Fs = True
Call pdqx(slc(0), 0, 0)
If fslc <> "" Then
MsfgFs.Rows = MsfgFs.Rows + 1
rowIndex = MsfgFs.Rows - 1
reOrder (MsfgFs.Object)
MsfgFs.TextMatrix(rowIndex, 1) = fx
MsfgFs.TextMatrix(rowIndex, 2) = Fy
MsfgFs.TextMatrix(rowIndex, 3) = fslc
MsfgFs.TextMatrix(rowIndex, 4) = fspj
End If
Next
=========================================
问题可能有一个,那就是maxDate数值可能过大
m60a1 2009-02-10
  • 打赏
  • 举报
回复
就像这样?

for i=0 to A
Function
next i

如果是这样的话,你需要把代码贴出来看看了,不一定是我说的问题,可能
写的代码里面存在问题,
programfish 2009-02-10
  • 打赏
  • 举报
回复
我的代码如下
For i = 0 To maxDate
fx = fsx(i)
Fy = fsy(i)

Fs = True
Call pdqx(slc(0), 0, 0)
If fslc <> "" Then
MsfgFs.Rows = MsfgFs.Rows + 1
rowIndex = MsfgFs.Rows - 1
reOrder (MsfgFs.Object)
MsfgFs.TextMatrix(rowIndex, 1) = fx
MsfgFs.TextMatrix(rowIndex, 2) = Fy
MsfgFs.TextMatrix(rowIndex, 3) = fslc
MsfgFs.TextMatrix(rowIndex, 4) = fspj
End If
Next

能不能把上maxDate分成两个小于1000的数字来循环解决呢。
东方之珠 2009-02-10
  • 打赏
  • 举报
回复
计算的数值超过了允许的范围。
programfish 2009-02-10
  • 打赏
  • 举报
回复
但是我这不是函数自己调用自己啊,我是按计算按钮后循环调用该函数。
m60a1 2009-02-10
  • 打赏
  • 举报
回复
千万不要用递归做这种事情,一般VB6.0在处理递归时,
每调用一个函数它都将分配一块内存地址出来,并且不会自动释放,因为递归本身就是在
函数内部再次调用函数本身,所以它也不能释放。
按照上面的理论,楼主应该知道为什么会内存空间溢出(不够)了。
建议:把递归的函数,拆成几个函数来调用,而不是一味的只调用这一个函数

7,785

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧