I'm not very good with memory management and I'm hoping someone can help explain to me why I am getting the EXC_BAD_ACCESS (code=1...) error. Xcode says that the error occurs when calling the getWord() method.
I am implementing a trie data structure and the error occurs when I try to get a word from my node. I think the problem is with my add function but I cant figure out whats going on. Any suggestions are appreciated.
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <string>
#include <vector>
#include <sstream>
using namespace std;
class Node
{
private:
string word;
bool endOfSentence = false;
int weight = -1;
public:
vector<Node> children = {};
Node() {
this->setWord("");
}
Node(string s){
this->setWord(s);
}
string getWord(){
return this->word;
}
/*vector<Node> getChildren() { //children private
return this->children;
}*/
void setWord(string s) {
this->word = s;
}
void setEOS(){
this->endOfSentence = true;
}
void setWeight(int weight){
this->weight = weight;
}
};
class Trie
{
public:
Node root = *new Node();
string get(string p) {
string s = "stub";
return s;
}
void add(vector<string> phrase, int weight){
Node current = this->root;
vector<string> sentence = phrase;
int w = weight;
int found = -1;
for (int i = 0; i < current.children.size(); i++) {
if (phrase[0] == current.children[i].getWord()) {
found = i;
}
}
if (found >= 0) {
current = current.children[found];
sentence.erase(sentence.begin());
add(sentence,w);
}
else {
addPhrase(sentence,w);
}
}
void addPhrase(vector<string> phrase, int weight) {
Node current = this->root;
for (int i = 0; i < phrase.size(); i++) {
Node temp = *new Node(phrase[i]);
current.children.push_back(temp);
current = current.children[current.children.size() - 1];
if (i == phrase.size() - 1) {
current.setEOS();
current.setWeight(weight);
}
}
}
};
Aucun commentaire:
Enregistrer un commentaire