运行一个简单的用户登录小程序,出现access violation at address错误,看了网上一篇解决的办法:
右击“我的电脑”。单击“属性”。在“系统属性”中单击“高级”。在“性能”中单击“设置”。在“性能选项”中单击“数据执行保护”。单击“添加”。选择要运行的程序。OK。就这么简单。
数据执行保护里面只有“仅为基本windows程序和服务启用dep” 和“为除下列选定程序之外的所有程序和服务启用dep”网上说的是,我的用户登录小程序添加到“选定程序之外”吗?不启用dep吗?
“为除下列选定程序之外的所有程序和服务启用dep”,不知道安不安全,没敢动,请教大侠们,这个错误到底是什么啊?怎么解决啊?

解决方案 »

  1.   

    不要动不动就用这种方式解决问题.这只是一个兼容选项.具体的可以看看MSDN当中对于Data Execution Prevention (DEP)的详细介绍.你的程序出现了access violation at address,则说明你的程序写得有问题.有某些类对象等被释放掉,或者还未创建实例,即未分配内存,就被访问操作,特别是改写.
      

  2.   

    AV错误检查一下你的程序中内存有没问题,LZ搞的解决的方法职能解决表面问题,根本问题没解决
      

  3.   

    新学编程,这个程序是完全按照书上说的做的,“有某些类对象等被释放掉,或者还未创建实例,即未分配内存,就被访问操作,特别是改写.”照实看不懂啊,莫非大学的教科书也有问题。。有个现象,并不是每次都access violation at address,3次中有1次出现,2次正常。请大侠过目下代码:
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Label1: TLabel;
        Label2: TLabel;
        Edit1: TEdit;
        Edit2: TEdit;
        procedure FormCreate(Sender: TObject);
        procedure Edit1KeyPress(Sender: TObject; var Key: Char);
        procedure Edit2KeyPress(Sender: TObject; var Key: Char);
        procedure Edit2Change(Sender: TObject);
          private
        { Private declarations }
      public
        { P
        procedure Edit2Change(Sender: TObject);
        procedure Edit2Change(Sender: TObject);ublic declarations }
      end;var
      Form1: TForm1;implementation
    {$R *.dfm}
    var
    i:integer;procedure TForm1.FormCreate(Sender: TObject);
    begin
    edit1.Text :='';
    edit1.maxlength :=10;
    edit1.enabled :=true;
    edit2.Text :='';
    edit2.maxlength :=6;
    edit2.enabled :=false;
    end;
    procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
    begin
    if key=#13 then
    if edit1.text='董达' then
    begin
    showmessage('用户名正确,请输入密码!');
    edit2.Enabled :=true;
    edit2.SetFocus;
    end
    else
    begin
    showmessage('用户名错误,请重新输入!');
    edit1.Text :='';
    edit1.SetFocus;
    end;
    end;
    procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
    begin
    if not (key in ['0'..'9']) then
    begin
    key:=#0;
    showmessage('密码必须为数字字符,请重新输入!');
    edit2.text :='';
    edit2.SetFocus;
    end;
    end;
    procedure TForm1.Edit2Change(Sender: TObject);
    begin
    if (length(edit2.Text)=6) then
    if (edit2.text='666666') then
    showmessage ('密码正确,请继续!')
    else
    begin
    i:=i+1;
    if i<3 then
    begin
    showmessage('密码错误,请重新输入!');
    edit2.Text:='';
    edit2.SetFocus;
    end
    else
    begin
    showmessage('3次密码错误,将退出应用程序!');
    close;
    end;
    end;
    end;
    end.