堆栈溢出错误delphi 7

时间:2014-07-05 15:40:10

标签: delphi stack-overflow

我制作了大约有40个列表框的应用程序。我有无限的for循环,一直是这些列表框中的ADD,DELETE或CHANGE项。经过一段时间约2小时的添加,更改和删除项目后,我收到“堆栈溢出”错误消息,应用程序停止。我在互联网上看到它是记忆的东西。我在任务管理器中看到我的应用程序的内存使用量正在增长和增长,但它从未减少。我认为我的应用程序永远不会释放内存,所以这就是问题所在。但我不能免费列表框,因为当我免费列表框它消失了。我没有在互联网上找到任何解决方案。抱歉英语不好,我想你可以理解我。谢谢。

此示例代码导致“Stack Overflow”错误。 Picture

procedure TForm1.BeginLoopClick(Sender: TObject); //begin the process
var
i,p:integer;
s:string;
begin
  listbox1.Clear;
  for i:= 1 to 10 do
  begin
  listbox1.Items.Add(IntToStr(i));

      if i= 7 then
      begin
      listbox1.Items[0]:='5';
      listbox1.Items.Delete(6);
      listbox1.Items.Delete(5);
      listbox1.Items.Delete(4);
      listbox1.Items.Delete(3);

      CallBeginLoopClick(sender);
      end;

  end;
end;

procedure TForm1.CallBeginLoopClick(Sender: TObject);
begin
      BeginLoopClick(sender);
end;

1 个答案:

答案 0 :(得分:1)

让我们以伪步骤运行您的代码:

1. Clear content
2. Add items 0 - 6, with data '1' - '7'
3. Change item 0's data into '5'
4. Delete item 3 - 6
5. There are three items left: 0 - 2 with data '5', '2', '3'
6. Goto step 1.

你能得出的唯一结论是这段代码将永远运行,因为没有逃避:

1. Clear content
2. Add items 0 - 6, with data '1' - '7'
3. Change item 0's data into '5'
4. Delete item 3 - 6
5. There are three items left: 0 - 2 with data '5', '2', '3'
6. Clear content
7. Add items 0 - 6, with data '1' - '7'
8. Change item 0's data into '5'
9. Delete item 3 - 6
10. There are three items left: 0 - 2 with data '5', '2', '3'
11. Clear content
12. Add items 0 - 6, with data '1' - '7'
13. Change item 0's data into '5'
14. Delete item 3 - 6
15. There are three items left: 0 - 2 with data '5', '2', '3'
16. etc...

这些步骤中缺少的步骤是对BeginLoopClick的调用。例程调用自己(通过另一个rutine),称为递归。所有这些电话都被记住了,因为没有人会结束。这就是你的堆栈溢出的原因(可能是像Windows Listbox内部组件一样)。