谁能解释下这个问题?
建立一个Goods类的数组,在数组中输入成员变量,然后输出到文件中。在从文件中读入,然后现实。为什么会出现异常
Unhandled exception at 0x5a9bad54 (msvcp100d.dll) in IO.exe: 0xC0000005: Access violation writing location 0xfeeefeee.
另外问一下,像这样的错误如何调试。我现在碰到这样的问题就是一头雾水,不知道如何下手。
#include <iostream>
#include <fstream>
#include <string>
#define MAX 3
using namespace std;
class Goods
{
int Num;
string Name;
string Infor;
public:
void Init(string name, string infor,int num=0) //默认形参的构造函数
{
Num=num;
Name=name;
Infor=infor;
}
void print()
{
cout<<Num<<'\t'<<Name<<'\t'<<Infor<<endl;
}
};
void main()
{
Goods goods[MAX];
int num;
string name,infor,filename;
cout<<"请输入货物相关信息(编号、货物名、货物介绍):"<<endl;
for(int i=0;i<MAX;i++)
{
cin>>num>>name>>infor;
goods[i].Init(name,infor,num);
}
cout<<"建立文件的文件名:"<<endl;
cin>>filename;
ofstream file(filename,ios::out);
if(!file)
{
cerr<<"文件打开失败"<<endl;
return;
}
for(int i=0;i<MAX;i++)
file.write((char*)(goods+i),sizeof(Goods));
file.close();
ifstream file1(filename,ios::in);
if(!file1)
{
cerr<<"文件打开失败"<<endl;
return;
}
Goods temp[MAX];
file1.read((char*)temp,sizeof(temp));
for(int i=0;i<MAX;i++)
temp[i].print();
file1.close();
}
[解决办法]
在Linux下试,没有遇到楼主所说的问题。
[code=C/C++]
#include <iostream>
#include <fstream>
#include <string>
#define MAX 3
using namespace std;
class Goods
{
int Num;
string Name;
string Infor;
public:
void Init(string name, string infor,int num=0) //默认形参的构造函数
{
Num=num;
Name=name;
Infor=infor;
}
void print()
{
cout<<Num<<'\t'<<Name<<'\t'<<Infor<<endl;
}
};
int main()
{
Goods goods[MAX];
int num;
string name,infor,filename;
cout<<"请输入货物相关信息(编号、货物名、货物介绍):"<<endl;
for (int i=0;i<MAX;i++)
{
cin>>num>>name>>infor;
goods[i].Init(name,infor,num);
}
cout<<"建立文件的文件名:"<<endl;
cin>>filename;
ofstream file(filename.c_str(),ios::out);
if (!file)
{
cerr<<"文件打开失败"<<endl;
return -1;
}
for (int i=0;i<MAX;i++)
file.write((char*)(goods+i),sizeof(Goods));
file.close();
ifstream file1(filename.c_str(),ios::in);
if (!file1)
{
cerr<<"文件打开失败"<<endl;
return -1;
}
Goods temp[MAX];
file1.read((char*)temp,sizeof(temp));
for (int i=0;i<MAX;i++)
temp[i].print();
file1.close();
return 0 ;
}
[/code
$./test
请输入货物相关信息(编号、货物名、货物介绍):
1
aa
aaa
2
bb
bbb
3
cc
ccc
建立文件的文件名:
test.txt
1aaaaa
2bbbbb
3ccccc
$
[解决办法]
试试把你写入文件的循环直接写成整个数组输出到文件,其实没问题的
[解决办法]
ifstream file1(filename,ios::in);
这个编译器不报错吗?
------解决方案--------------------
ofstream file(filename.c_str(),ios::out);