Пишу парсер через бинарное дерево и на моменте когда парсит дерево, он верно все обрабатывает, но когда доходит до момента когда строку нужно перевести в число дабл, а он не находит в строке такого числа, прога выбрасывает ошибку. Делаю вывод, что ошибка в дереве, я задебажил дерево и нашел то, что когда программа выходит из функции окончательно, сбрасываются значения в ветвях дерева, записанные через структуру. Что делать и как исправить? (ниже функция, создающая дерево)
void parcer2(string str, Tree* tree) {
//нужно найти максимальное значение, занести его в дерево, разделить строку на 2 части и вызвать эту же функцию два раза
//первые 5 операций
for (int x = 0; x < 4; x++) {
for (int i = 0; i < str.length(); i++) {
if (str[i] == Operation[x][0]) {
tree->item = Operation[x];
size_t tmp = str.find(Operation[x]);
string str1 = str.substr(0, tmp);
string str2 = str.substr(tmp + 1, str.length() - tmp);
Tree leftTree;
Tree rightTree;
tree->leftTree = &leftTree;
tree->rightTree = &rightTree;
parcer2(str1, &leftTree);
parcer2(str2, &rightTree);
return;
}
}
}
//6 операций длинной 3 символа
if (str.length() > 3) {
for (int x = 4; x < 11; x++) {
for (int i = 0; i < str.length() - 2; i++) {
if (str[i] == Operation[x][0] && str[i + 1] == Operation[x][1] && str[i + 2] == Operation[x][2]) {
tree->item = Operation[x];
size_t tmp = str.find(Operation[x]);
string str1 = str.substr(tmp + 3, str.length() - tmp);
Tree leftTree;
tree->leftTree = &leftTree;
tree->rightTree = NULL;
parcer2(str1, &leftTree);
return;
}
}
}
}
//2 операции: х и числа
for (int i = 0; i < str.length(); i++) {
if (str[i] == Operation[11][0]) {
tree->item = Operation[11];
tree->leftTree = NULL;
tree->rightTree = NULL;
return;
}
}
tree->item = str;
tree->leftTree = NULL;
tree->rightTree = NULL;
return;
}
-Куда девается земля, когда в ней дырка? О.Генри
Локальные переменные
Tree leftTree;
Tree rightTree;
живут, пока выполняется код в блоке if
. После этого компилятор освобождает отведенную под них память.
tree->leftTree = new Tree();
tree->rightTree = new Tree();
parcer2(str1, tree->leftTree);
parcer2(str2, tree->rightTree);
Виртуальный выделенный сервер (VDS) становится отличным выбором
помогите, вопрос простой, но я запуталсяя создал два массива, которые сам же прописываю с клавиатуры, мне надо найти одинаковые элементы этих...