Нарушение доступа при воздействии на значение переменной? - PullRequest
0 голосов
/ 29 декабря 2011

Приведенный ниже код написан в unit2 (form2), он вызывает значения, введенные в поля для адреса электронной почты и пароля (в form1), вчера код работал отлично, я внес некоторые изменения и теперь: этот код не работает, возникает ошибка нарушения прав доступа, когда я нажимаю кнопку COMMENCER:

  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 ]

3 голосов
/ 29 декабря 2011

Где вы создаете свой объект form1?Похоже, он не инициализировался до того, как вы получили к нему доступ, и поэтому вы получаете AV.

Ваш второй код работает, потому что вам не нужно инициализировать строковые переменные перед доступом к ним или назначением им значений, и вы назначаете ихнапрямую, не через переменную form1.

Но остановите ее до email := form1.ed_Email.Text; и посмотрите, является ли form1 nil или нет.

1 голос
/ 30 декабря 2011

Вы всегда можете проверить, была ли форма создана первой, чтобы избежать нарушений прав доступа.

если назначено (Form1), тогда начинаются // назначения заканчиваются;

1 голос
/ 29 декабря 2011

я думаю, что вам нужно создать форму1 (как я думаю, это доступная форма в вашем случае) .. и вы, возможно, закрыли и освободили форму так, ваш

  email := form1.ed_Email.Text;

дает AV, так как form1 не существует (так как его освободили сейчас), поэтому у вас не может быть значения ed_Email.Text .

убедитесь, что вы не закрываете форму1 (освобождает) перед нажатием Btn_commencer

...