delphi 奇怪的问题!

独醒子 2011-01-20 02:44:02
一个程序如下
执行时出错,单步调试时鼠标指在变量上看到当前值
居然赋值无法赋值。
这是啥意思啊?
正序中我注释了单步调试时候的变量值。
请高手指点。

==============================================
program prjClinet;

uses
Forms,
unFrmMain in 'src\unFrmMain.pas' {frmMain},
unDataHandler in 'src\unDataHandler.pas',
unMainPrc in 'src\unMainPrc.pas',
unADObj in 'src\unADObj.pas';

{$R *.res}

begin
Application.Initialize;
RUN;
Application.Run;
end.

===================================================
unit unMainPrc;

interface

uses Forms,Dialogs,SysUtils,unFrmMain,unADObj;

var
adObj:TADObj;

procedure RUN;

implementation

procedure RUN;
var defP,i:Integer;
begin
i:=0; <--执行后i值为4209575
defp:=1; <--执行后defp值为4218011
Application.CreateForm(TfrmMain, frmMain);
for i:=0 to adObj.defPortCount do <--执行后i值为4209575
begin
defP:=adObj.GetDefPort; <--执行后i值为4209575,defp值为正确的6
....
end
end;
=====================================================

我只是想在窗体创建前做一系列事情,才这样写的。
刚开始写代码就遇到这样问题
这是咋了?
...全文
114 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
CaiBirdy 2011-01-21
  • 打赏
  • 举报
回复
楼主你搞混了,程序一开始不是这里,而是initialization段,
另外你代码贴完整了吗?adObj到底创建了没?
还有像7楼说的adObj.defPortCount属性的get里面做的什么动作?
火龙岛主 2011-01-21
  • 打赏
  • 举报
回复
在窗体创建前可以使用
initialization 进行初始化。

不能了解
for i:=0 to adObj.defPortCount do <--执行后i值为4209575
begin
defP:=adObj.GetDefPort; <--执行后i值为4209575,defp值为正确的6
....
end 做了什么内容。
独醒子 2011-01-20
  • 打赏
  • 举报
回复
执行结果当然不正确,循环只执行一次就跳出来了 应该执行10次的啊。
dyf2001 2011-01-20
  • 打赏
  • 举报
回复
执行结果正确就行,有时候会遇到这种情况,不知道具体原因
独醒子 2011-01-20
  • 打赏
  • 举报
回复
哪有啊,这是程序一开始,仅仅执行这几句,

从工程文件运行开始就直接到RUN里面了
才2个赋值语句,咋会写乱什么内存
haitao 2011-01-20
  • 打赏
  • 举报
回复
异常时,是不能看到有些变量的
正常的断点,是可以

另外,是不是与编译优化有关?关掉优化试一试
CaiBirdy 2011-01-20
  • 打赏
  • 举报
回复
楼主最好查看相关单元的initialization段,
感觉应该是哪里把进程空间的内存数据给写乱了

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧