Я сталкиваюсь с 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] "