影响变量值时的访问冲突?

时间:2011-12-29 11:21:27

标签: delphi delphi-2010

下面的代码写在unit2(form2)中,它调用在电子邮件和密码框中输入的值(在form1中),昨天代码工作正常,我做了一些更改,现在:这段代码没有' t work,当我单击Button COMMENCER时,它会引发Access Violation错误:

  procedure TForm2.Btn_commencerClick(Sender: TObject);
  begin

  email := form1.ed_Email.Text;// <----- LOOK HERE 
  password := form1.Ed_typedpass.Text; // <-----AND HERE
  MD5 := GetMD5;
  MD5.Init;
  MD5.Update(TByteDynArray(RawByteString(password)), Length(password));
  password := LowerCase(MD5.AsString);

  etc.......

但是这段代码有效:

 email := 'myemail@yahoo.com';
 password := 'mypass'; 
 MD5 := GetMD5;
 MD5.Init;
 etc etc......

问题:

为什么?

3 个答案:

答案 0 :(得分:3)

你在哪里创建form1对象?听起来它在你访问它之前没有初始化,因此你得到AV。

您的第二个代码可以正常工作,因为您不必在访问或为其分配值之前初始化字符串变量,而是直接分配它们,而不是通过form1变量。

但断点为email := form1.ed_Email.Text;并查看form1是否为nil

答案 1 :(得分:1)

我认为你必须创建form1(因为我觉得它在你的情况下是可用的形式)..你可能已经关闭并释放了表单,所以,你的

  email := form1.ed_Email.Text;

正在提供AV,因为form1不存在(因为它现在被释放),所以你不能拥有 ed_Email.Text 值。

在按 Btn_commencer

之前,请确保您没有关闭form1(释放)

答案 2 :(得分:1)

您始终可以检查是否已首先创建表单以避免访问冲突。

如果已分配(Form1) 开始    //作业 端;