为什么此代码会导致分段错误错误?

时间:2019-06-08 10:01:09

标签: c++ linux gcc

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

arraysEqual = (a1, a2) =>
    a1.length === a2.length &&
    a1.every((o, idx) => this.objectsEqual(o, a2[idx]));

  objectsEqual = (o1, o2) =>
    typeof o1 === "object" && Object.keys(o1).length > 0
      ? Object.keys(o1).length === Object.keys(o2).length &&
        Object.keys(o1).every(p => this.objectsEqual(o1[p], o2[p]))
      : o1 === o2;

更新:此行上的代码例外

#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;
}

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

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

1 个答案:

答案 0 :(得分:1)

我只是解决了这个问题,没有链接到导致错误的文件系统库,尽管我不知道为什么没有正确的链接库仍可以编译代码...

在添加后,在cmake中:

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

现在一切正常。