Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> wxWidgets - Ошибка сигментации, wxTreeCtrl проблемы 
:(
    Опции темы
Stajor
  Дата 10.1.2006, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 11.7.2005

Репутация: нет
Всего: нет



Всем доброго времени суток.
Возникла проблема в работе с библиотекой wxWidgets при использовании wxTreeCtrl. Использую MinGwStudio2.05, wxWidgets2.5, ОС- Win2K.
Суть проблемы.
Программа предназначена для редактирования тестов некоторого девайса. В главном окне есть дочерние окна дерева и редактора тестов.
Иерархия дерева:
КОРЕНЬ (название проекта тестов)
ГРУППА (группа тестов, кол-во не ограниченно)
ПАРАГРАФ (параграф тестов, кол-во не ограничено)
...
Создаю дерево, наследуя от wxTreeCtrl, так же создаю структуру, в которой должны хрониться тесты во вложенных векторах(при первоначальном запуске программы в структуру записывается только информация о названии проекта тестов). В структуре для каждой ветви дерева сохраняю wxTreeItemId в соответстующих иерархии векторах, для связи элемента дерева со структурой.
По контекстному меню добавляю в дерево ветвь группы1, с сохранением группы1 в структуре тестов
Код

ts_temp_g->s_Group.id_tree = AppendItem(IdSelect, name, 2); // создание ветви группы1 
m_TS->s_Tests.v_Group.push_back(ts_temp_g->s_Group);    // запись группы1 в вектор структуры тестов    
OnView(ts_temp_p->s_s_Group.Id); // функция выделения добавленной ветви

где:
m_TS - указатель на структуру тестов;
IdSelect - wxTreeItemId корня дерева (запоминается в селекте при вызове контекстного меню);
ts_temp_g->s_Group.id_tree - запись wxTreeItemId во временной структуре создаваемой группы1;
После чего по контекстному меню группы добавляю параграф1 тестов в группу1
Код

if(m_TS->s_Tests.v_Group.size())
            for(int i = 0; i != (int)m_TS->s_Tests.v_Group.size(); i++)
                if(IdSelect == m_TS->s_Tests.v_Group[i].id_tree)
                {    
                    ts_temp_p->s_Paragraph.id_tree = AppendItem(IdSelect, name, 3); // создании ветви параграфа1
                    m_TS->s_Tests.v_Group[i].v_Paragr.push_back(ts_temp_p->s_Paragraph); // запись параграфа1 в вектор структуры тестов    
                    break;
                }
OnView(ts_temp_p->s_Paragraph.Id); // функция выделения добавленной ветви

IdSelect - wxTreeItemId группы1 (запоминается в селекте при вызове контекстного меню);
При добавлении группы1 и последующем добавлении в нее параграфов проблем никаких не возникает, и программа функционирует без каких либо сбоев.
При добавлении группы2 и последующем добавлении в нее параграфа вылетает ошибка сигментации при селекте добавленного параграфа в функции OnView(ts_temp_p->s_Paragraph.Id);
Код

void TreeBrows::OnView(int id_test)
{
    TestStruct::structParagraph* pr; // указатель на структуру параграфа
if((pr = m_TS->s_Tests.GetS_Paragr(id_test)) != NULL) // передача id_test в функцию поиска элемента структуры
        {
            id_item = pr->id_tree;
            this->SetItemText(id_item, pr->TestParagraph); // запись названия параграфа в дереве
            if(!this->IsExpanded(id_item))
            {
                this->Expand(id_item); // раскрытие эл-та дерева, если есть нижние ветви
            }
            if(!this->IsSelected(id_item))
            {    
                wxMessageBox("OnView 1", "", wxOK ); // сообщение проходит
                wxASSERT_MSG(id_item.IsOk(), "Неверный wxTreeItemId! OnView") ; // ошибка не выдается
                
                this->SelectItem(id_item); // выделение параграфа в дереве, ЗДЕСЬ ВЫЛЕТАЕТ ПРОГРАММА
                
                wxMessageBox("OnView 2", "", wxOK ); // сообщение не проходит
            }
        }
}

В функции поиска элемента структуры ошибок не возникает, элемент находится без проблем.
Ошибка, выдаваемая компилятором:
Program has received a signal-name="SIGSEGV",signal-meaning="Segmentation fault" at operator==({name="i1",value="@0x22d4e0"},{name="i2",value="@0x1f21014"}), file C:\Projekts of VGenba\include\wx\treebase.h:77
Эта ошибка возникает почти всегда, но очень редко программа проходит без сбоев.
Над этой проблемой бьюсь уже неделю, и никак не могу найти ее решения. Пробовал использовать в структуре указатель wxTreeItemId*, результат тот же. Так же пробовал использовать wxTreeItemData в структуре и добавлении wxTreeItemData к создаваемым ветвям, ошибка возникает та же.
Если кто сталкивался или знает способ решения подобной ситуации, помогите.
PM MAIL   Вверх
DeadSoul
Дата 10.1.2006, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1217
Регистрация: 25.9.2005
Где: Москва

Репутация: 2
Всего: 11



Цитата(Stajor @ 10.1.2006, 17:40 Найти цитируемый пост)

Ошибка, выдаваемая компилятором:

Цитата(Stajor @ 10.1.2006, 17:40 Найти цитируемый пост)

Эта ошибка возникает почти всегда, но очень редко программа проходит без сбоев.

Так у тебя ошибка компилятора или ошибка времени испольнения?


--------------------
 Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". 

Бьем спамеров их же оружием. Пусть весь спам сыпется им
[email protected] 
PM   Вверх
Stajor
Дата 11.1.2006, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 11.7.2005

Репутация: нет
Всего: нет



Времени исполнения.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0418 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.