我正在使用Delphi 10.1和Windows 10,包含所有最新更新.
我的应用程序使用并重新使用大量50个或更多的动态数组,每个数组最多包含5,000个元素.在执行期间,使用SetLength(thearray,0)或清除这些数组thearray:=nil.紧接着这个,分配一个新的大小SetLength(thearry,newsize).
对于大多数阵列,这很顺利.但偶尔,这些分配中的一个或另一个(每次程序运行时都是相同的)在没有例外或其他通知的情况下崩溃.崩溃可能发生在清除功能或大小调整功能上.必须使用程序管理器关闭程序,然后重新启动.
真正奇怪的是导致崩溃的数组可能会改变,具体取决于所使用的内存管理器 - 本机Delphi,ScaleMM2,FastMM4.在过去,我有时通过重命名数组来解决问题,但是在多次更改和重新编译之后,问题会不时弹回.
机器的RAM检查正常,问题在多台机器上仍然存在.
这是因为代码中存在缺陷,堆损坏,双重释放,缓冲区溢出等.错误的不可预测性与此类错误一致.
不要在其他地方寻找错误.它不会是内存管理器.它不是硬件.它不是变量的名称.这是你的代码有问题.
通过拨打诊断工具开始调试.在编译器选项中启用范围检查.切换到FastMM4的完整调试版本.希望这些变化足以隔离故障.如果没有,请将代码缩小,直到再次进行最小化.这样你就可以减少检查的代码.
| 归档时间: |
|
| 查看次数: |
244 次 |
| 最近记录: |