一台PC上的Stack Overflow错误,另一台没有错误?

时间:2011-08-20 15:30:36

标签: delphi stack-overflow

问题在于:

我在笔记本电脑上使用Delphi XE开发了一个项目。当我在台式机上运行它时,我在这一行上遇到了“堆栈溢出”异常(我还在代码的不同部分使用了Writeln(),只有这一行是问题的根源):

S_List.LoadFromFile('Test.txt');

(S_List是在此行之前创建的本地TStringList)

但是,当我在笔记本电脑上运行相同的项目时,它的工作完全没有任何错误或例外。问题不在于方法本身,因为当我更改整个部分并使用'TStreamReader'再次写入时,会发生同样的异常。这次是StreamReader.ReadLine()。此外,我更改了文件位置,名称,......问题仍然存在。

这似乎是一个文件系统问题,但我不知道这是怎么发生的。

有什么想法吗?是因为病毒还是恶意软件?

P.S:两者(笔记本电脑和PC)都有Win7和Delphi XE。此外,两者都有2GB RAM。

编辑:为了清楚起见,我提出这个问题的主要目的不是找到异常的位置(通过提供一行代码就不可能发生,可以吗?)。但是,相反,为什么这个错误在不同的硬件中是不一致的呢?这有什么理由?另外,我怎样才能找到导致这种不一致的原因?

4 个答案:

答案 0 :(得分:4)

我的猜测,猜测是我们所能做的,就是你有一个未初始化的局部变量。或者在释放它后访问的对象。我不确定这会导致你的堆栈溢出,但几乎任何事情都可能出现这种情况。除了疯狂之外,你应该使用具有完整调试设置的FastMM。

答案 1 :(得分:2)

如果某人在使用Delphi应用程序诊断特定环境中的异常时遇到困难,我强烈建议madExcept。它是免费的非商业用途,非常容易设置,非常有用。安装它,为项目启用它,构建调试版本并将其部署到问题机器。发生异常时,您应该获得一个非常详细的调用堆栈,说明问题发生的位置。

答案 2 :(得分:2)

我会检查一下:

  1. 两台计算机上的测试文件是否相同
  2. 两台计算机上的区域设置是否相同
  3. 如果Delphi XE有组件源,调试TStringList源,可能有一个bug
  4. 正如Nathanial建议的那样,使用madExcept或类似的库
  5. 创建只分配TStringList和加载测试文件的简单程序。如果这样可行,bug就会出现在代码中的其他地方,如果失败则可能是在TStringList

答案 3 :(得分:0)

检查重复的DCU,如果可能的话,执行完整版本的已安装库和应用程序以查看错误是否仍然存在。