2 lowen 666 lowen_666 于 2015.06.05 00:13 提问

c++访问冲突不知怎么解决 5C

#include
#include
#include
#include
using namespace std;
class Account
{
public:
Account();

Account(int);
friend void Regiser();
friend int SameAccount(char []) ;
friend void Login();
friend int SamePassword(char []);
friend void ChangePassword();
private:
char Password[50];
char Name[50];
char Problem[3];
char *ProblemAnswer[3];
char
Address;
char account[50];
int mark;
};
Account::Account()
{
mark=1;
Address=new char[50];
Address="d:\";
for(int i=0;i {
Problem[i]=new char[50];
ProblemAnswer[i]=new char[50];
}
}
Account::Account(int i)
{
mark=0;
Address=new char[50];
for(int i=0;i {
Problem[i]=new char[50];
ProblemAnswer[i]=new char[50];
}
}
void Regiser()
{
Account *a1=new Account;
char TempPassword [50];
cout cin>>a1->account;
while(SameAccount(a1->account))
{
cout<<"你输入的账户名已经被注册,请输入另一个账户名"< cin>>a1->account;
}
strcpy(a1->Address,a1->account);
strcat_s(a1->Address,4,".dat");

cout<<"(监测)a1->Address"<<a1->Address<<endl;
cout<<"a1->account  (监测)"<<a1->account<<endl;

cout<<"请输入你的名字"<<endl;
cin>>a1->Name;
cout<<"请输入你的登录密码"<<endl;
cin>>a1->Password;
cout<<"请再次输入你的登录密码"<<endl;
cin>>TempPassword;
while(strcmp(a1->Password,TempPassword)!=0)           //若前后两次输入密码不一致
{
    cout<<"前后两次输入的密码不一致,请重新设置密码"<<endl;
    cout<<"请输入你的登录密码"<<endl;
    cin>>a1->Password;
    cout<<"请再次输入你的登录密码"<<endl;
    cin>>TempPassword;
}
cout<<"&&&&&————密码设置成功,接下来请设置你的密保————*****"<<endl;
cout<<"请输入第一个密保问题"<<endl;
cin>>a1->Problem[0];
cout<<"请输入第一个密保问题的答案"<<endl;
cin>>a1->ProblemAnswer[0];
cout<<"请输入第二个密保问题"<<endl;
cin>>a1->Problem[1];
cout<<"请输入第二个密保问题的答案"<<endl;
cin>>a1->ProblemAnswer[1];
cout<<"请输入第三个密保问题"<<endl;
cin>>a1->Problem[2];
cout<<"请输入第三个密保问题的答案"<<endl;
cin>>a1->ProblemAnswer[2];
fstream FileAddress(a1->Address,ios::out|ios::binary);          //用 用户账号建立一个文件
if(!FileAddress)
{
    cout<<"注册时新文件没有正常建立"<<endl;
    abort();
}
FileAddress.close();
fstream File("d:\\C++File.dat",ios::out|ios::binary|ios::in);         //打开储存所有账户的文件

if(!File)
{
    cout<<"注册时总文件未能正常打开"<<endl;
    abort();
}
Account *a2=new Account;
File.seekg(0,ios::beg); 
do{
    File.read((char*)&(*a2),sizeof(Account)); 
}while(File&&a2->mark!=0);
delete a2;
File.seekp(-long(sizeof(Account)),ios::cur);
File.write((char*)&(*a1),sizeof(Account));
delete a1;
Account *mark=new Account(1);  
File.write((char*)&mark,sizeof(Account));          //在文件末 写入 空标志;
delete mark;
File.close();
cout<<"密保设置成功,注册完成!"<<endl;
a1=NULL;
a2=NULL;

}
int SameAccount(char account[])

{
Account *a11=new Account;
fstream File("d:\C++File.dat",ios::in|ios::binary);
if(!File)
{
cerr<<"在调用检查帐户名是否一致时的函数中文件没有正常打开"< abort();
}
File.seekg(0,ios::beg); //流指针指向文件头
do
{
File.read((char *)&(a11),sizeof(Account));
if(strcmp(a11->account,account)==0)
return 1;
}while(File&&a11->mark!=0);
File.close();
delete a11;
a11=NULL;
return 0;

}

部分代码如上,在我调用Regiser()函数,里面调用SameAccount()函数判断我输入的账号在文件中是否已存在,然后当执行到 if(strcmp(a11->account,account)==0)语句时,就发生访问冲突图片说明

怎么破,究竟哪里出问题了!!

6个回答

gamefinity
gamefinity   Rxr 2015.06.05 06:39

运行的时候all是否为NULL,如果ALL是NULL的话,all->account就会出异常。

91program
91program   Ds   Rxr 2015.06.05 07:30

重点查查:
1) if 比较的两个变量是否为空,即 NULL
2) if 比较的两个变量是否有越界的情况,例如,字符串没有结束符,即没有 NULL

yangbo50304
yangbo50304   2015.06.05 09:16

把这个变量初始化下char account[50],如果不初始化没有结尾\0的话,有可能导致内存错误,超过50个范围都有可能。
初始化memset(account,0,50)

lx624909677
lx624909677   Ds   Rxr 2015.06.05 12:43

按F5调试运行程序,看看代码蹦在了哪里05就是内存越界或者空指针之类的原因引起的

u012377333
u012377333   Rxr 2015.06.05 17:32

代码太长,具体是哪个部分的问题呢?

feng1790291543
feng1790291543   Ds   Rxr 2015.06.05 11:34

是不是后台有打开过的dll

Csdn user default icon
上传中...
上传图片
插入图片