我在程序中遇到无法解决的问题。我在一个类中声明了一个std::filesystem::path p {"path/to/save/dir"};
之类的属性。在同一个类中,我有一个将一些数据保存到.txt文件的方法。首先,我检查一些事情,例如用户是否给了扩展名,然后是否存在同名文件。因此,如果用户不想覆盖它,我请他提供一个新的名称文件。然后我写入文件。因此,问题是,每当程序退出类时,都会弹出seg错误,特别是对于保存方法,如果它进入if子句,则不会保存,因为它将收到seg错误。我认为这与类的析构函数以及调用path对象的析构函数有关。
使用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
析构函数(我的班级没有指定析构函数方法
马上)。没用。*:
case 1: {
Game g1(true);
while(g1.play()){}
break;
}
基本上,这是main.cpp的一部分。它具有一个菜单,后跟类似于用户选择的switch语句。因此,当它从循环中出现并中断并选择退出时,我将收到段错误。
谢谢您的帮助。
答案 0 :(得分:0)
已修复
因此,在@ user4581301告诉我这是GCC错误之后,我重新进行了研究,发现它确实是GCC 8.3.0错误。它在GCC 9或GCC 8.3.0-7ubuntu中已修复(尽管是实验性的)。因此,现在的“修补程序”是在源文件之后添加-lstdc++fs
,并且不会显示任何错误。程序按预期工作!