Имеется класс:
class tree{
private:
vector<node> nodes;
vector<wstring> codedString;
int fmax;
int inode1;
int inode2;
public:
void extractString(wstring str); //Разделяем строку на первичные узлы
void construct();
void codeString (wstring str);
void printCodedString();
void printFreqTable();
void printCodeTable();
void codeNodes();
void code(node& n, int level);
void selectNode (wstring str);
wstring decodeString ();
void findCode (wstring str);
node findNode (wstring code);
bool inNodes (wstring str);
bool inNodes (int freq);
void getMinNode1();
void getMinNode2();
};
Сам объект node:
class node{
private:
int freq, child1, child2;
wstring sym;
wstring code;
bool flag;
public:
node(int fr, int ch1, int ch2, wstring s, wstring c):freq(fr),child1(ch1),child2(ch2),sym(s),code(c),flag(false){};
int getFreq();
int getChild1();
int getChild2();
wstring getCode();
//bool getFlag();
wstring getSym();
void incFreq();
void incCode(int val);
void toggle();
//bool operator> (node& n);
bool operator<= (node& n);
};
Функция, создающая вектор с нодами:
void tree::extractString (wstring str)
{
wcout << L"извлекаются узлы из строки" << endl;
for (int i=0; i<str.size()/2; i++){
wstring tmp = str.substr (i*2, 2);
if (inNodes(tmp)) selectNode(tmp);
else {
node n (1, -1, -1, tmp, L"");
nodes.push_back(n); //тут и возникает ошибка
}
}
wcout << L"узлы извлечены" << endl;
}
main, где всё это вызывается:
int main(){
setlocale (LC_ALL, "");
tree t;
wstring str;
wcout << L"Введите строку" <<endl;
getline(wcin, str);
t.extractString(str);
//и так далее
}
Так вот, если поле
code
у объекта
node
имеет тип
wstring
, как сейчас - в функции на втором же узле выскакивает ошибка сегментации.
Введите строку
Корабли лавировали, лавировали, да не вылавировали
извлекаются узлы из строки
Ошибка сегментирования (сделан дамп памяти)
Стоит его заменить на
int
(и заодно поменять реализацию всего, что с этим полем связано) - всё успешно создаётся, но этот тип для моих целей не подходит.
Вопрос: почему вектор из объектов с одним строковым полем создаётся, а с двумя - уже нет? Что здесь не так?