Delphi 5:当常量作为函数参数传递时,其值会发生变化

Delphi 5:当常量作为函数参数传递时,其值会发生变化,delphi,memory,constants,Delphi,Memory,Constants,我在非常古老的代码(15年)中有一个地方刚刚开始出现问题: cTemp:=tblmimlist.FieldByName('TTType').AsString 在Delphi的DB.pas中,FieldByName函数传递的“FieldName”常量显示“保存或取消时单击”的值,而不是“TTType” 起初,我认为这可能是由于在一个较大的pas单元(约17k行)中造成的,所以我将其拆分为两个pas单元,但没有效果 我被难住了。有什么想法吗?我会使用中介进行调试: field := tblMemLi

我在非常古老的代码(15年)中有一个地方刚刚开始出现问题:

cTemp:=tblmimlist.FieldByName('TTType').AsString

在Delphi的DB.pas中,FieldByName函数传递的“FieldName”常量显示“保存或取消时单击”的值,而不是“TTType”

起初,我认为这可能是由于在一个较大的pas单元(约17k行)中造成的,所以我将其拆分为两个pas单元,但没有效果


我被难住了。有什么想法吗?

我会使用中介进行调试:

field := tblMemList.FieldByName ('TTTYpe') ;
cTemp := field.asString ;

最终的原因是一个表单上的组件太多。它上面有大约1500个部件。当我移除大约300个时,问题就消失了。这感觉像是内存/资源问题

所以,我的下一步是重新构造表单,这样我就可以在表单上获得1500个(或更多)组件,而不会再次导致此问题


如果有人对其他解决方案有任何建议,我很乐意听取

代码中的缺陷似乎很可能存在。请给出一个明显的问题:自从源代码上次正常工作以来,您对它做了哪些更改?无论如何,这种症状听起来像是内存覆盖。你试过使用FastMM4吗?我按照建议安装了FastMM4,它确实发现了一个内存泄漏,但修复后对问题没有任何影响。当那条线路运行时,我仍然会收到AV。至于展示一个例子,我不确定还可以发布什么。当我F7这一行时,它立即转到FieldByName函数,作为参数传递的值不是代码中显示的值。就这些。F7之前为“TTType”;按F7键后,显示为“单击保存或取消”。这不是答案,应该是注释。可以。无论如何,这不是借口。不要写评论作为答案。