Russian Qt Forum
Ноябрь 23, 2024, 19:03 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: selectedRows() - вызывает Heap Corruption что делать?  (Прочитано 4933 раз)
CMorgan
Гость
« : Октябрь 12, 2011, 15:03 »

Добрый день.
Работаю с QT 4.7.4. VisualStudio Add-In 1.1.9 (Студия 2008,2010)
Необходимо из QTableView получить индексы выделенных пользователем строк. Пишу слот:

Код:
void fileLoader::ClearStocUpdateTableLine()
{

  QModelIndexList index=m_grid_view->dataBaseTableView->selectionModel()->selectedRows(0); //dataBaseTableView - как раз объект QTableView
 
  int index_size=index.size();
  QString curr_index;
for (int i=0;i<index_size;i++)
{
    curr_index=index[i].data().toString();
}

}//<---- вот тут вываливается  Heap Corruption при попытке уничтожить объект QModelIndexList index

Heap Corruption вылезает и под 2008 и под 2010-й студией, но только в Дебажном варианте, в релизе все работает нормально.  Индексы возвращает правильные (что выделяю на QTableView, то и возвращает), рушится именно при попытке освободить память QList.
Чего я делаю не так?.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Октябрь 12, 2011, 15:12 »

Тут ошибки не вижу. Скорее всего, она в другом месте, а тут просто проявляется.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
CMorgan
Гость
« Ответ #2 : Октябрь 12, 2011, 17:22 »

Ради интереса собрал сейчас приложение из QT example addressbook (ничего в нем не меняя) - симптомы точно такие же.

При выборе строки приложение вываливается при дебажной сборке, в релизной все работает как надо.

Т.е. конкретно проблемы с selectedRows  Обеспокоенный
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #3 : Октябрь 12, 2011, 18:15 »

Попробуй продебажить "вглубь" и найти где точно падает.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
CMorgan
Гость
« Ответ #4 : Октябрь 13, 2011, 11:12 »

В общем при любом действии связанном с удалением элемента из QModelIndexList index под дебагом(будь-то вызов деструктора, clear или просто стирание одного элемента) прога вываливается сюда:

qregion.cpp:
Код:
QRegion::~QRegion()
{
    if (!d->ref.deref()) //<----
        cleanUp(d);
}



И крашится.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #5 : Октябрь 13, 2011, 11:22 »

QModelIndexList
QRegion
Что-то не то. Улыбающийся Походу, где-то бьешь память.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
CMorgan
Гость
« Ответ #6 : Октябрь 13, 2011, 16:10 »

Решили траблу.
Пришлось скачивать qt-everywhere-opensource-src-4.7.4 и собирать ее под 2010 студией.  И тогда все заработало как надо.

Баг был вызван использованием qt-win-opensource-4.7.4-vs2008 в 2010ке. Хотя ничего беды не предвещало и до этого момента  с QModelIndexList все работало нормально Подмигивающий
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.047 секунд. Запросов: 23.