Показать сообщение отдельно

  #7  
Старый 18.09.2009, 15:55
Ra$cal
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
С нами: 10386906

Репутация: 599


По умолчанию

Цитата:
Сообщение от rudvil  
Можно пример, если не трудно?)
Если речь идет о ретурне в функц. то у меня такая-же ошибка потом выскакивает =/
std::stack<Tree> postfixTree;

Ты объявил стек локально. Значит после выхода из функции будет вызван деструктор, что должно удалить все записи в стеке. Поэтому индексация хоть и будет работать, но вот обращение будет по адресам типа fefefefe и прочими подобными. Ах да. Еще важнее момент, что ты объявил стек std::stack<Tree> а не std::stack<Tree*>. Таким образом элементы так же являются локальными для данной функции объектами.

Починить можно так - в функции перед выходом ты должен сделать не просто

tree.tree = &postfixTree.top();

Ты должен tree.tree = new Tree [postfixTree.size()];
И в цикле скопировать элементы.

А для понимания проблемы сделай контсруктор и деструктор Tree, которые в консоль выводят сообщения и посмотри, что появится в консоли при выходе из функции...

или другой враиант - делаешь типа такого:
Код:
struct Tree {
    tree_type treetype;
    int treesize;
    char* value;
    std::stack<Tree*> tree;
    Tree () {
        this->treesize = 0;
        this->value = 0;
        this->tree = 0;
    }
};

Последний раз редактировалось Ra$cal; 18.09.2009 в 16:01..
 
Ответить с цитированием