为什么当一个函数的参数超过3个是很容丢失数据,有兴趣的兄弟进来研究一下(1分)

O

osfan

Unregistered / Unconfirmed
GUEST, unregistred user!
如题,我最近写了一个五子棋的程序玩,发现了一个问题,而且不止一次遇到,我的函数的参数为3个的时候(都是 integer类型的),最后一个参数传过去就变成0了,这样的问题我遇到了好几次了,还有一次最后的一个参数变成了15,怎么回事呀,郁闷中,后来把参数减少到2个时就没有遇到这样的问题了,是不是编译器的原因呀~~~我的函数没有错误的,这样我就不得不把有些参数改成全局变量了
 
J

jamcky

Unregistered / Unconfirmed
GUEST, unregistred user!
采用结构试一试
 
O

osfan

Unregistered / Unconfirmed
GUEST, unregistred user!
什么意思呀,用数据解构么
 
R

Rainstorey

Unregistered / Unconfirmed
GUEST, unregistred user!
建议跟踪进去看一下,有可能是编译器优化的结果。
 
O

osfan

Unregistered / Unconfirmed
GUEST, unregistred user!
楼上的,能不能说的详细点呀
 
W

weichao9999

Unregistered / Unconfirmed
GUEST, unregistred user!
肯定你的代码逻辑有问题,百分之百!!
 
M

Mike1234567890

Unregistered / Unconfirmed
GUEST, unregistred user!
肯定是你的代码有问题
只要参数类型正确就问题的
是不是使用了异步操作函数?
 
U

ufo!

Unregistered / Unconfirmed
GUEST, unregistred user!
delphi 采用cpu 寄存器传参的,是不是cpu超频太厉害导致的不稳定?
呵呵,开个玩笑。
建议关闭编译器的优化选项再试试。
或者贴点代码让大家看看有无问题。
 
C

cqwty

Unregistered / Unconfirmed
GUEST, unregistred user!
数据结构是很多内容的,上面建议的是采用结构体,也就是定义一个结构体,里面保存三个子项,这样来做,那么传递的时候,你只需要传递这个结构体就可以了啊
 
Z

zhukewen

Unregistered / Unconfirmed
GUEST, unregistred user!
不可能吧?如果编译程序不能保证这一点,是绝对不敢发布的。
 

风卷残月

Unregistered / Unconfirmed
GUEST, unregistred user!
測試1:
procedure TForm1.ShowPara(var a: Integer;
var b: Integer;
var c: Integer);
begin
ShowMessage(
'參數一:' + IntToStr(a) +
'參數二:' + IntToStr(b) +
'參數三:' + IntToStr(c)
);
end;

測試2:
procedure TForm1.ShowParaE(a, b, c: Integer);
begin
ShowMessage(
'參數一:' + IntToStr(a) +
'參數二:' + IntToStr(b) +
'參數三:' + IntToStr(c)
);
end;

都沒有發現問題, 是不是無意中把值给更改了
 
顶部