使用 std::filesystem::path 时出现分段错误

问题描述 投票:0回答:1

我知道分段错误是一种常见错误,可能是由不同的错误内存访问情况引起的。我尝试过,但无法弄清楚我的代码有什么问题。

这是最小的可重现示例:

#include <filesystem>
#include <iostream>

using namespace std;

int main()
{
    filesystem::path filePath("file");

    if (filesystem::exists(filePath))
        cout << "file exists" << endl;
    else
        cout << "file not found" << endl;

    return 0;
}

这是构建命令和执行结果(目标文件不存在)。

$ g++ -std=c++17 main.cpp
$ ls
a.out  main.cpp
$ ./a.out
file not found
Segmentation fault (core dumped)
$ g++ --version
g++ (Ubuntu 8.4.0-3ubuntu2) 8.4.0
...

调试显示分段错误发生在

filePath
破坏点,在标头的这一部分(
/usr/include/c++/8/bits/stl_vector.h
):

      /**
       *  The dtor only erases the elements, and note that if the
       *  elements themselves are pointers, the pointed-to memory is
       *  not touched in any way.  Managing the pointer is the user's
       *  responsibility.
       */
      ~vector() _GLIBCXX_NOEXCEPT
      {
    std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
              _M_get_Tp_allocator());
    _GLIBCXX_ASAN_ANNOTATE_BEFORE_DEALLOC;
      }

代码或构建命令有什么问题?

c++ gcc g++
1个回答
0
投票

我不知道这个问题是否已经解决,但是你可以使用一些不需要的替代方案

std::filesystem

这是一个检查文件是否存在的简单函数的示例:

#include <iostream>
#include <sys/stat.h>

bool checkFileExists(const char* filepath) {
    struct stat buffer;
    return(stat(filepath, &buffer) == 0);
}
© www.soinside.com 2019 - 2024. All rights reserved.