小编Ast*_*ome的帖子

将std :: filesystem :: path传递给函数segfaults

当我尝试将其std::filesystem::path用作函数参数时,它在我的计算机上出现段错误。这是一个最小的示例:

#include <filesystem>

void thing(const std::filesystem::path& p) {
    return;
}

int main() {
    thing("test");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

此代码段导致来自gdb的以下回溯:

#0  0x0000563a5a3814b3 in std::vector<std::filesystem::__cxx11::path::_Cmpt, std::allocator<std::filesystem::__cxx11::path::_Cmpt> >::~vector (this=0x23, __in_chrg=<optimized out>) at /usr/include/c++/8/bits/stl_vector.h:567
#1  0x0000563a5a38132c in std::filesystem::__cxx11::path::~path (this=0x3, __in_chrg=<optimized out>) at /usr/include/c++/8/bits/fs_path.h:208
#2  0x0000563a5a381f74 in std::filesystem::__cxx11::path::_Cmpt::~_Cmpt (this=0x3, __in_chrg=<optimized out>) at /usr/include/c++/8/bits/fs_path.h:643
#3  0x0000563a5a381f8f in std::_Destroy<std::filesystem::__cxx11::path::_Cmpt> (__pointer=0x3) at /usr/include/c++/8/bits/stl_construct.h:98
#4  0x0000563a5a381e3f in std::_Destroy_aux<false>::__destroy<std::filesystem::__cxx11::path::_Cmpt*> (__first=0x3, __last=0x0) at /usr/include/c++/8/bits/stl_construct.h:108
#5  0x0000563a5a381ab0 in std::_Destroy<std::filesystem::__cxx11::path::_Cmpt*> (__first=0x3, __last=0x0) at /usr/include/c++/8/bits/stl_construct.h:137
#6  0x0000563a5a3817c1 in std::_Destroy<std::filesystem::__cxx11::path::_Cmpt*, std::filesystem::__cxx11::path::_Cmpt> (__first=0x3, __last=0x0) at …
Run Code Online (Sandbox Code Playgroud)

c++ segmentation-fault c++17 std-filesystem

5
推荐指数
1
解决办法
662
查看次数

指向可能存在或不存在的对象的向量的向量

这是问题所在:我正在使用SFML制作游戏,我想要一个sf :: Drawable*的向量,所以我可以简单地做windowManager.add(randomGameSprite),但我遇到的问题是我希望能够拥有它所以我可以删除randomGameSprite而无需手动从窗口中删除指针.有没有办法让它在尝试绘制之前检查对象是否存在?

我正在使用C++ 11,但智能指针在我尝试的内容中没有太大帮助.我尝试使用std :: shared_ptr,但它保持drawables活着.

c++ pointers vector

3
推荐指数
1
解决办法
222
查看次数