HOME    FORUMS    MEMBERS    RECENT POSTS    LOG IN  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > ПРОГРАММИРОВАНИЕ > С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #3771  
Старый 17.09.2009, 21:41
intNet
Познающий
Регистрация: 31.05.2009
Сообщений: 68
Провел на форуме:
1271980

Репутация: 19
По умолчанию

С delphi перехожу на си, и ксвоему огорччению не нашёл там привычных и удобных функций copy, delete, etc.
strstr(), strpos() и т.п. пока не приспособился к ним, по этому помогите, как например разделить список login;pass(т.е. занести в одну переменную login, в другую - pass) ?
 
Ответить с цитированием

  #3772  
Старый 17.09.2009, 21:56
Hiro Protagonist
Участник форума
Регистрация: 26.08.2009
Сообщений: 133
Провел на форуме:
193434

Репутация: 79
Отправить сообщение для Hiro Protagonist с помощью ICQ
По умолчанию

strtok() - http://msdn.microsoft.com/ru-ru/library/2c8d19sb.aspx

А вообще про CRT (RTL) слабо почитать? В том же K&R в приложении стандартная библиотека описывается.
 
Ответить с цитированием

  #3773  
Старый 18.09.2009, 01:54
rudvil
Участник форума
Регистрация: 25.08.2008
Сообщений: 187
Провел на форуме:
2066562

Репутация: 86
По умолчанию

Пишу на Visual С++ 2008
Конвертирую постфикс выражение в дерево.


tree.cpp
Код:
struct Tree {
    tree_type treetype;
    int treesize;
    char* value;
    Tree* tree;
    Tree () {
        this->treesize = 0;
        this->value = 0;
        this->tree = 0;
    }
};

void ParseAssigment (Tree& tree) {
    std::queue<Token> Postfix; // В нем хранится постфикс выражение например [1][2][3][*][+]
    std::stack<Tree> postfixTree;
    while (!Postfix.empty()) {
        if (Postfix.front().tokentype == token_type_numeric) {
            Tree* nodeTree = new Tree;
            nodeTree->treetype = tree_type_num_value;
            nodeTree->value = Postfix.front().value;
            Tree* childTree = new Tree[2];
            nodeTree->tree = childTree;
            postfixTree.push(*nodeTree);
        }
        else if (isOperator(Postfix.front().tokentype)){
            Tree* nodeTree = new Tree;
            nodeTree->treetype = tree_type_operator;
            nodeTree->value = strOperator(Postfix.front().tokentype);
            nodeTree->treesize = 2;
            Tree* childTree = new Tree[2];
            nodeTree->tree = childTree;
            nodeTree->tree[1] = postfixTree.top();
            postfixTree.pop();
            nodeTree->tree[0] = postfixTree.top();
            postfixTree.pop();
            postfixTree.push(*nodeTree);
        }
        Postfix.pop();
    }
    tree.treetype = tree_type_postfixexpr;
    tree.tree = &postfixTree.top();
    postfixTree.pop();
    std::cout << "[" << tree.tree->tree[1].value << "]\n"; // Тут все значения корректны... т.е. показывает * как и должно быть, с остальными тоже все ок
}

main.cpp
Код:
#include "tree.cpp"

int main () {
    Tree* tree = new Tree;
    ParseAssigment(*tree);
    std::cout << "outside func[tree->tree->treetype][" << tree->tree->tree[1].value << "]\n"; // вот тут пишет "Unhandled exception. Access violation..."
    return 0;
}
Сразу после конвертации проверяю дерево ещё внутри функции - все значения совпадают т.е. все ок.

Но после того как я возвращаю готовое дерево из функции и пытаюсь вывести содержимое мне пишет "Unhandled exception. Access violation...".
То что отмечено желтым кудато пропадает...
Цитата:
std::cout << "[" << tree->tree->tree[1].value << "]\n";
Насколько я понимаю тут
Код:
ParseAssigment(*tree);
происходит утечка(или потеря данных)...
Вопрос, как решить эту проблему, или если я где-то допускаю ошибку - поправьте плз)

Заранее огромное спасибо =]
 
Ответить с цитированием

  #3774  
Старый 18.09.2009, 02:23
Ra$cal
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
Провел на форуме:
1354067

Репутация: 599


По умолчанию

std::stack<Tree> postfixTree;
tree.tree = &postfixTree.top();

ты возвращаешь указатель на локальный объект, который умирает при выходе из функции. вопрос - зачем все делать на указателях? это ж гемор. сделай на нормальных членах данных, сделай копирование и не морочь себе голову временем жизни объектов. или юзай умные указатели.
 
Ответить с цитированием

  #3775  
Старый 18.09.2009, 02:39
rudvil
Участник форума
Регистрация: 25.08.2008
Сообщений: 187
Провел на форуме:
2066562

Репутация: 86
По умолчанию

Цитата:
Сообщение от Ra$cal  
std::stack<Tree> postfixTree;
tree.tree = &postfixTree.top();

ты возвращаешь указатель на локальный объект, который умирает при выходе из функции. вопрос - зачем все делать на указателях? это ж гемор. сделай на нормальных членах данных, сделай копирование и не морочь себе голову временем жизни объектов. или юзай умные указатели.
Можно пример, если не трудно?)
Если речь идет о ретурне в функц. то у меня такая-же ошибка потом выскакивает =/
 
Ответить с цитированием

  #3776  
Старый 18.09.2009, 15:02
[R]eD
Познающий
Регистрация: 01.08.2006
Сообщений: 35
Провел на форуме:
94171

Репутация: 3
По умолчанию

Дурацкий вопрос...

Как сделать цикл не в плюс а в минус, тоесть не с 1 до 100, а со 100 до 1 например?)))

Visual Basic
 
Ответить с цитированием

  #3777  
Старый 18.09.2009, 15:10
Dosia
Участник форума
Регистрация: 05.06.2009
Сообщений: 127
Провел на форуме:
1313455

Репутация: 249
По умолчанию

Dim i As Integer
For i = 100 To 1 Step -1
Print i
Next i
 
Ответить с цитированием

  #3778  
Старый 18.09.2009, 15:55
Ra$cal
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
Провел на форуме:
1354067

Репутация: 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..
 
Ответить с цитированием

  #3779  
Старый 18.09.2009, 16:15
rudvil
Участник форума
Регистрация: 25.08.2008
Сообщений: 187
Провел на форуме:
2066562

Репутация: 86
По умолчанию

Ааа понял, спасибо)))
Теперь все понятно, вотк ак я решил эту проблему
Код:
    Tree* tmp = new Tree;
    *tmp = postfixTree.top();
    tree.tree = tmp;
А насчет
Код:
std::stack<Tree*> tree;
спасибо, но это мне не нужно)
У меня в postfixTree стеке в конце функции(после всех операций) остается всего 1 елемент... так что мне нужно просто вытащить и присвоить этот елемент к другому tree.

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

  #3780  
Старый 20.09.2009, 19:37
-m0rgan-
Постоянный
Регистрация: 29.09.2008
Сообщений: 553
Провел на форуме:
2584134

Репутация: 519


Отправить сообщение для -m0rgan- с помощью ICQ
По умолчанию

re2all

Нужен класс для отправки сообщений на email и icq.

Пример:

...
char buff[SIZE];
...
Содержимое буффера необходимо отправить на мыло или асю.

Подскажите плз класс для этой цели.
Зарание благодарен!
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Часто задаваемые вопросы по MySQL Серый PHP 5 28.12.2006 18:26
Интернетчики задали российскому президенту очень странные вопросы podkashey Мировые новости. Обсуждения. 4 07.07.2006 16:53
Вопросы по Ipb 2.0 Voodoo_People Уязвимости CMS / форумов 26 15.02.2005 22:57



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ