我一直在使用freepascal的资金管理程序很长一段时间,最近开始使用指针来解决一些限制。它在90%的时间内都能正常工作。我正在尝试调试似乎随机发生的EAccessViolation。我检查了每个指针,无论它在哪里被分配,访问或释放,这对我来说都很好。
我终于找到了一种情况,它总是发生并跟踪代码“负责”的部分:一个构建一个应该大约2000个字符长的ansistring的函数。我用pchar替换它,并意识到当我尝试使用stralloc分配超过524个字符时发生访问冲突。只要它们低于524个字符,我就可以分配尽可能多的pchar。
如果有人知道如何在不尝试读/写任何内容的情况下获得访问冲突,那就太棒了。 有人向我指出这是一个堆腐败
我还尝试在同一台计算机上的不同版本的操作系统(ubuntu 10,lubuntu 14)上运行我的程序,同样的问题。但是使用另一台计算机,在lubuntu 14上,似乎工作正常。 通过更多测试,我发现问题出现在我使用的操作系统或计算机上,但如果我运行程序的终端的大小大于某个值,则不会发生。我使用CRT单元可能有问题,更具体地说是“窗口”功能,即使我在我的单元中没有使用任何指针访问CRT的功能?我正在研究它......
这可能是一个错误的记忆吗? memtest86没有返回错误... 否感谢您的任何建议。
答案 0 :(得分:1)
针对难以捉摸的问题的基本免费Pascal调试程序:
不,可能只是编程错误。