моя функция удаления работала нормально, но после того, как я попробовал использовать ее с файлом, он перестал работать, Visual Studio сообщает: «Возникло исключение: нарушение прав чтения. _Pnext 0x5C7E04. Произошло» и выбрасывает меня в исходный файл. где строка говорит "для (auto _Pnext = & _Myproxy -> _ Myfirstiter; * _Pnext; _Pnext = ( _Pnext) -> _ Mynextiter) {(* _Pnext) -> _ Myproxy = nullptr;}" у меня нет изменил функцию, чтобы можно было удалить файл, только удаляя его из оперативной памяти, я просто проверяю, работает ли он до сих пор, но иногда это не так ...
class SLL {
private:
long ID;
string name;
string sex;
float average;
SLL* next;
public:
SLL(int ID = 0, string name = "no name", string sex = "NA", float average = 0.0, SLL* next = NULL) {
this->ID = ID; this->name = name; this->sex = sex; this->average = average; this->next = next;
}
class function {
public:
SLL* readfile(SLL* plist);
SLL* writefile(SLL* plist);
SLL* delete_user(SLL* plist);
};
};
SLL* SLL::function::delete_user(SLL* plist) {
long ID;
cout << "Enter user ID to delete user:";
cin >> ID;
SLL* ptr, * p = plist;
ptr = p;
if (p->ID == ID) {
plist = p->next;
delete p;
cout << "User with ID:" << ID << " has been deleted!!";
wait();
}
else {
while (p != NULL) {
if (p->ID != ID) {
ptr = p;
p = p->next;
}
else break;
}
if (p == NULL) {
cout << "ID:" << ID << " cannot be found on the list" << endl; wait();
}
else {
ptr->next = p->next;
delete p;
cout << "User with ID:" << ID << " has been deleted!!";
wait();
}
}
if (plist == NULL)alternative_user = 0;
return plist;
}
SLL* SLL::function::writefile(SLL* plist) {
SLL* p = plist;
ofstream file;
file.open("data.dat", ios::out);
int i = 1;
while (true) {
if (p != NULL) {
file.write((char*)p, sizeof(SLL));
p = p->next;
i++;
}
else break;
}
file.close();
return plist;
}
SLL* SLL::function::readfile(SLL* plist) {
SLL* p, * ptr;
p = new SLL;
ptr = plist = p;
ifstream file;
file.open("data.dat", ios::in);
int i = 1;
while (1) {
file.read((char*)p, sizeof(SLL));
if (!file.eof()) {
ptr = p;
if (!file.eof()) {
p = new SLL;
ptr->next = p;
p->next = NULL;
i++;
}
}
else break;
};
ptr->next = NULL;
file.close();
return plist;
}