2014-01-21 3 views
0

У меня есть серьезная проблема, и я не мог найти ответ нигде. Надеюсь, кто-то сможет мне помочь.Хранить объект в дереве дает ошибку сегментации (C++)

Прежде всего я пытаюсь создать дерево массив с информацией, хранящейся в

node.h файл

class Node { 
public: 
Node(); 
void setPerson(Person* _p) { 
this->person = _p; 
} 

Node* getNode(int i) { return nodes[i];} 
void insert(Person* _p, Tele* _tele, int i); 
private: 
Node *nodes[10]; 
Person* person; 
}; 

node.cpp

Node::Node() { 
    for(int i=0;i<10;i++) { nodes[i] = new Node(); } 
    person = new Person(); 
} 

void Node::insert(Person* _p, Tele _tele, int i) { 
     std::string t=tele.getString(); 
     if(t.size()==i) { 
     this->person = _p; // here comes the segmentation fault 
     } else { 
     char charNode t.at(i); 
     int nextNode = charNode - '0'; 
     nodes[nextNode]->insert(_p,_tele,++i); 
     } 
    } 
+0

Что делает конструктор 'Node()' do? и, в частности, как вы нажимаете узлы узла Node [10] '? – Nim

+0

Конструктор инициирует новые узлы и новый объект person; – user3219523

+0

Мой хрустальный шар полагает, что вы еще не выделили все элементы «узла» в массиве. – molbdnilo

ответ

2

Прежде чем даже пытаться insert, то конструктор строит 10 узлов в куче ... каждый из которых создает еще 10 узлов ... каждый из которых создает еще 10 узлов ...

Я думаю, что проблема в том, что на вашем компьютере недостаточно памяти. Попробуйте построить конечный дерево вместо.

+0

Да, я пришел к тому же решению, но как мне это сделать? Я хочу остаться с рекурсией. – user3219523

+0

Erm, лениво распределять? – Nim

+0

да, thx для подсказки его работы !! Я внедрил статическую переменную, которая подсчитана до 20 (dosnt нужно больше узлов), и теперь ошибка исчезла. – user3219523

 Смежные вопросы

  • Нет связанных вопросов^_^