我在我的程序中遇到了一个我无法克服的问题。我有一个类,我在其中声明了一个属性,例如std::filesystem::path p {"path/to/save/dir"};
. 我在同一个类中有一个将一些数据保存到 .txt 文件的方法。首先,我检查一些事情,例如用户是否提供了扩展名,然后是否存在同名文件。因此,如果用户不想覆盖它,我会要求他提供一个新的名称文件。然后我写入文件。所以,问题是,每当程序退出类时,seg fault 就会弹出,特别是 save 方法如果它进入 if 子句,那么它将不会保存,因为它会收到 seg fault。我认为它与类的析构函数和调用路径对象的析构函数有关。
使用 gdb,我得到了这个消息:
0x0000555555558907 in std::vector<std::filesystem::__cxx11::path::_Cmpt, std::allocator<std::filesystem::__cxx11::path::_Cmpt> >::~vector (this=0x20,
__in_chrg=<optimized out>) at /usr/include/c++/8/bits/stl_vector.h:567
567 std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
到目前为止我尝试过的事情:
- 我已经尝试显式调用
std::filesystem::path
析构函数(我的类现在没有指定析构函数方法)。不工作。 - 我尝试将路径对象移到类之外,将其“转换”为全局对象。现在,只有当我退出声明类对象 ***** 的 main.cpp 文件时,才会出现此问题。但不是在我退出课堂的时候。
- 我试图用 clear 方法清除路径,但由于某种我不明白的原因,它不会被调用。所以它什么也没做。
*:
case 1: {
Game g1(true);
while(g1.play()){}
break;
}
本质上,这是 main.cpp 的一部分。它有一个菜单,后跟一个类似于用户选择的 switch 语句。因此,当它从循环中存在并中断并且我选择退出时,我会收到段错误。
任何帮助都是appriciated,谢谢。