问题描述
- c++初学者求助 Access violation reading location
- 函数如下
#include<iostream>#include<fstream>#include<iomanip>using namespace std; int main(){ int Month Day; string Name Email Address; while (cin >> Month >> Day >> Name >> Email >> Address) { Person p(Month DayNameEmailAddress) m; int size = sizeof(Person); string name = p.getName(); int month = p.getMonth() day = p.getDay(); fstream out1(""SortByName.dat"" ios::out | ios::in | ios::binary);//按姓名排序 out1.seekp(0 ios::end); while (out1.tellp()) { out1.seekp(-size ios::cur); out1.read((char*)&m size); if (m.getName() <= name) break; out1.seekp(out1.tellp() ios::beg); out1.write((const char*)&m size); out1.seekp(-2 * size ios::cur); } out1.write((const char*)&p size); out1.close(); fstream out2(""SortByBirthDay.dat"" ios::out | ios::in | ios::binary);//按生日排序 out2.seekp(0 ios::end); while (out2.tellp()) { out2.seekp(-size ios::cur); out2.read((char*)&m size); if ((m.getMonth() < month) || (m.getMonth() == month&&m.getDay() <= day)) break; out2.seekp(out2.tellp() ios::beg); out2.write((const char*)&m size); out2.seekp(-2 * size ios::cur); } out2.write((const char*)&p size); out2.close(); }}
头文件Person.h
//Person.h #ifndef PERSON_H#define PERSON_H#include<iostream>#include<string>using namespace std;class Person{public: Person(int int string string string); Person(){}; int getMonth() const; int getDay() const; string getName() const; void setEmail(string); void setTel(string); string getDayOfWeek() const; virtual void print() const;protected: int month; int day; string m; string dayOfWeek; string name; string email; string tel;};#endif
Person.cpp在这
#include""Person.h""Person::Person(int a int b string c string d string e){ month = a; day = b; name = c; email = d; tel = e; dayOfWeek = getDayOfWeek(); string mm[12] = { ""January""February"" March"" April"" May""June""July""August""September"" October"" November"" December"" }; m = mm[month-1];}int Person::getMonth() const{ return month;}int Person::getDay() const{ return day;}string Person::getName() const{ return name;}void Person::setEmail(string a){ email = a;}void Person::setTel(string a){ email = a;}string Person::getDayOfWeek() const{ string week[7] = { ""Sunday""Monday""Tuesday""Wednesday""Thursday""Friday""Saturday"" }; int m=monthd=dayy=15; if (m < 3) { m += 12; y--; } int ans = y + y / 4 + 26 * (m + 1) / 10 + d - 36; ans = (ans % 7 + 7) % 7; return week[ans];}void Person::print() const{ cout << m << '/' << day << '/' << dayOfWeek << "" "" << name << "" Tel:"" << tel << "" Email:"" << email << endl;}
整个函数运行结束后报错
Unhandled exception at 0x5527DF58 (msvcp120d.dll) in AddressBook.exe: 0xC0000005: Access violation reading location 0x0043E4A4.求大神指导,在下感激不尽
解决方案
0xC0000005错误 表示使用了未创建(未分配内存空间)的变量或对象。
你看看是不是有些量没有初始化或者分配空间就用了
解决方案二:
析构顺序有问题,好好理顺下,程序的生存周期
解决方案三:
是不是对象释放的时候出错了。
时间: 2024-12-28 03:11:50