gpt4 book ai didi

c++ - 为什么此代码会导致段错误?

转载 作者:太空狗 更新时间:2023-10-29 12:22:27 26 4
gpt4 key购买 nike

我正在用 cmake 构建它,在 ubuntu 19.04 上使用 gcc当我运行它时,它会导致 list_dir 函数内部出现段错误异常。我不知道为什么。请帮忙。任何帮助将不胜感激。

#include <string>
#include <iostream>
#include <vector>
#include <filesystem>

namespace fs = std::filesystem;

static void list_dir(const std::string &path, bool recursive){

try{
std::vector<std::string> dirs;

try{
for (const auto &entry : fs::directory_iterator(path)){
std::cout << entry << "\n";

if(recursive && entry.is_directory() && !entry.is_symlink())
dirs.push_back(entry.path().string());
}
}
catch(const fs::filesystem_error &err){
std::cerr << "err: " << err.what() << "\n";
}

if(recursive){
for (const auto &p : dirs)
list_dir(p, true);
}
}
catch(const std::exception &err){
std::cerr << "err: " << err.what() << "\n";
}
}

int main (int argc, char *argv[]) {

if (argc != 2)
{
std::cerr << "Usage: index <dir>\n";
return 1;
}

list_dir(argv[1], true);
std::cout << "Done.\n";
return 0;
}

更新:异常发生在这行代码

for (const auto &entry : fs::directory_iterator(path))

更新:如果有人感兴趣,这里是 cmake 文件

cmake_minimum_required(VERSION 3.1)
set(CMAKE_C_COMPILER "gcc")
set(CMAKE_CXX_COMPILER "g++")
project(index VERSION 1.0.0 LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 17)
file(GLOB_RECURSE SourceFiles "src/*.cpp" "src/*.h")
add_executable(${PROJECT_NAME} ${SourceFiles})

最佳答案

我刚刚解决了这个问题,我没有链接到导致错误的文件系统库,虽然我不知道为什么代码仍然可以在没有正确链接库的情况下编译...

在 cmake 中,在我添加之后:

target_link_libraries(${PROJECT_NAME} "-lstdc++fs") 

现在一切正常。

关于c++ - 为什么此代码会导致段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56505330/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com