Ошибка сегментации при создании большого дерева в C ++ - PullRequest
0 голосов
/ 03 марта 2019

Я сталкиваюсь с segfault, когда пытаюсь создать слишком большое дерево.Если tree_size = 10000, программа работает нормально, но когда tree_size = 100000, программа аварийно завершает работу непосредственно перед последней строкой (т. Е. После оператора печати "Finished").

Я чувствую, что размер дерева 100 000 не должен быть таким большим, поэтому я был бы удивлен, если на моем компьютере не хватает памяти или что-то в этом роде.Является ли segfault проблемой с кодом или моим компьютером?

Это код, который я использую:

#include <iostream>
#include <memory>
#include <vector>

template<class T> using sp = std::shared_ptr<T>;
template<class T> using wp = std::weak_ptr<T>;

struct Node: public std::enable_shared_from_this<Node>
{
    std::string value;
    std::vector<sp<Node> > children;
    wp<Node> parent;

    Node(std::string value, const wp<Node>& parent = wp<Node>())
    : value {value}
    , children {std::vector<sp<Node>>()}
    , parent {wp<Node>()}{}

    sp<Node> AddLeaf(const std::string& value)
    {
        sp<Node> newLeaf = std::make_shared<Node>(value, shared_from_this());
        this->children.emplace_back(std::move(newLeaf));
        return this->children.back();
    }
};

int main(int argc, char * argv[])
{
    int tree_size = 100000;
    sp<Node> root = std::make_shared<Node>(std::to_string(0));
    sp<Node> current = root;
    for(int i = 1; i < tree_size; ++i)
    {
        current->AddLeaf(std::to_string(i));
        current = current->children[0];
    }
    std::cout << "Finished" << std::endl;
    return 0;
}

При отладке в XCode я получаю сообщение об ошибке «Поток 1:EXC_BAD_ACCESS [код = 2, адрес = 0x7fff5f3ffff8] "

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...