-2

这是我点击时得到的错误btnInfoClick

调试器异常通知
Project_PAT_Phase_3.exe 引发异常类 EAccessViolation,并带有消息“模块 'Project_PAT_Phase_3.exe 中地址 004047E0 的访问冲突”“读取地址 00000022”。

程序运行顺利,没有任何错误,直到我单击代码中所示的按钮。请感谢您的帮助。

unit Navigation;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, InfoPopUp;

type
  Tvector = Array[1..14] of string;
  TFrmNavigation = class(TForm)
  btnVote: TButton;
  RdgInfo: TRadioGroup;
  Label2: TLabel;
  btnInfo: TButton;
 procedure btnInfoClick(Sender: TObject);
 private

public
 MyFile : TextFile;
 sLine : string;
 sArrayParty : Tvector;
end;

var
  FrmNavigation: TFrmNavigation;

implementation


procedure TFrmNavigation.btnInfoClick(Sender: TObject);
var
 K : integer;
 iCheck : integer;
begin
FrmInfo.Visible := true;
K := 1;
iCheck := 0;

if FileExists('PartyInfo.txt') <> True
then
  begin
    MessageDlg('File does not exist',mtError,[mbOK],0);
    Exit;
    end;// end of If statement

AssignFile(MyFile,'PartyInfo.txt');
Reset(MyFile);

while NOT eof(MyFile) do
 begin
  Inc(K);
  Readln(MyFile,sLine);
  sLine := sArrayParty[K];
end;//end of While
  closefile(MyFile);


 case RdgInfo.ItemIndex  of
 0 : begin
     FrmInfo.Caption := 'African Christian Democratic Party (ACDP)';
     FrmInfo.redOutput.Text := sArrayParty[1];
     end;
 1 : begin
     FrmInfo.Caption := 'African National Congress (ANC)';
     FrmInfo.redOutput.Text := sArrayParty[2];
     end;
 end;

下面的最后一个end.是错误在代码中弹出的位置,但它在项目单元中,这很奇怪,因为当我有一个断点时,异常会在 while 循环处停止程序。

program PAT_Phase_3;

uses
  Forms,
  WelcomePage in 'WelcomePage.pas' {frmWP},
  Navigation in 'Navigation.pas' {FrmNavigation},
  InfoPopUp in 'InfoPopUp.pas' {FrmInfo};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TfrmWP, frmWP);
  Application.CreateForm(TFrmNavigation, FrmNavigation);
  Application.CreateForm(TFrmInfo, FrmInfo);
  Application.Run;
end.
4

2 回答 2

0

在 Delphi 中,您可以通过项目设置将表单设置为 AutoCreate 或不设置。如果您的项目不是自动创建所有表单,那么您的 FrmInfo 将为零。在您的行之前添加此代码 FrmInfo.Visible := true;,看看它是否能让您走得更远。

if FrmInfo = nil then
  FrmInfo := TFrmInfo.Create(nil);
于 2013-10-23T18:49:44.367 回答
0

错误消息的地址非常接近于零,表明您正在访问一个 nil 对象引用。FrmInfo 很可能是零。或者也许 sArrayParty 为零。使用调试器确认错误在哪里。显然,引用 nil 引用是错误的。

当您遇到这样的错误时,请使用配置为在异常时中断的调试器将您指向出错的代码行。然后尝试找出那行代码失败的原因。

如果您看到数百行代码,则很难找出错误所在。如果您可以专注于一行代码,那就容易多了。是时候学习调试了。

于 2013-10-23T18:41:24.337 回答