我知道分段错误是一种常见错误,可能是由不同的错误内存访问情况引起的。我尝试过,但无法弄清楚我的代码有什么问题。
这是最小的可重现示例:
#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;
}
代码或构建命令有什么问题?
我不知道这个问题是否已经解决,但是你可以使用一些不需要的替代方案
std::filesystem
。
这是一个检查文件是否存在的简单函数的示例:
#include <iostream>
#include <sys/stat.h>
bool checkFileExists(const char* filepath) {
struct stat buffer;
return(stat(filepath, &buffer) == 0);
}