C++ 读取对象后访问错误

C++ 读取对象后访问错误,c++,virtual-functions,vtable,C++,Virtual Functions,Vtable,我正在为一个学校项目制作一个密码管理器,如果在所有贴纸上都使用,它会带来巨大的保修无效。其目的是能够对程序中的数据执行CRUD,并以“加密”形式将其写入磁盘 我有一个基类型和子类型的动态数组,可以使用Library::WriteToFiles()写入内存,也可以使用Library::ReadFromFiles()从内存读取。这一切在我的调试设置中都非常有效,我总是先写,然后立即读回内存 int main() { bool debug = true; if (debug) { Libra

我正在为一个学校项目制作一个密码管理器,如果在所有贴纸上都使用,它会带来巨大的保修无效。其目的是能够对程序中的数据执行CRUD,并以“加密”形式将其写入磁盘

我有一个基类型和子类型的动态数组,可以使用Library::WriteToFiles()写入内存,也可以使用Library::ReadFromFiles()从内存读取。这一切在我的调试设置中都非常有效,我总是先写,然后立即读回内存

int main() {
bool debug = true;
if (debug) {

    Library library = Library();
    library.Add(new Password("Outside", "yobro"));
    library.Add(new Password("Wut", "idk"));
    library.Add(new UsernameLogin("Yo", "M8", "James May"));

    library.Print();

    cout << endl;

    library.WriteToFiles();
    library.ReadFromFiles();

    library.Print();
    return 0;

}

已经明确指出,这一行:

baseFileObject.read((char*) password, sizeof(*password));
只是对我的用例不起作用。序列化是显而易见的、可扩展的、理想的解决方案,但由于这是一个学校项目,我要用老式的方式将文本写入文件,并使用sstream或类似的方式对其进行解析


感谢您的帮助:)

baseFileObject.read((char*)密码,sizeof(*password))
仅在Password类没有指针成员变量和非平凡成员变量对象时才起作用。Password类是如何定义的?它有3个私有变量。两条弦和一个布尔。数据总是被读取的。我缺少的只是虚拟函数。两个字符串和一个布尔然后这整件事
baseFileObject.read((char*)password,sizeof(*password))无效。你不能像这样解读非POD类型。这是不可能的——假设
std::string
中有1000个字符。
sizeof(*password)
会给你什么?它不会是1000或更高。它将是
密码
类的实际大小,而不是它在运行时保存的数据。阅读
string
s是非常重要的(这意味着它们内部可能包含指针)。拥有任何
virtual
方法也是非常重要的。
public:
virtual int Type();
virtual string ToString();
virtual bool IsEmpty();
virtual bool Encrypt(unsigned int key);
virtual bool Decrypt(unsigned int key);

[[nodiscard]] bool isEncrypted() const;

[[nodiscard]] const string &getPassword() const;
void setPassword(const string &newPassword);

[[nodiscard]] const string &getLocation() const;
void setLocation(const string &newLocation);

int PasswordStrength();
baseFileObject.read((char*) password, sizeof(*password));