Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вылетает приложение при QSqlTableModel::select(); В Debug режиме, на Windows 
V
    Опции темы
loneybibi
Дата 22.1.2012, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 28.5.2010
Где: Донецк (Украина)

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



Добрый день всем! smile

Есть модель QSqlTableModel.
На кнопку повесил такой код:
Код

tableModel->select();
ui->tableView->selectRow(0);


При релизной сборке все нормально, но при сборке в дебаг режиме приложеие вылетает с ошибкой:
Код

Microsoft Visual C++ Runtime error
Runtime Error!
Program: C:\Projects\untitled.exe
This application has requested the Runtime to terminate it an unusual way.
Please contact ...... etc....


При этом в консоли вывод такой:
Код

ASSERT: "idx >= 0 && idx < s" in file ..\..\include/QtCore/../../../../../../ndk_buildrepos/qt-desktop/src/corelib/tools/qvarlengtharray.h, line 107
C:\Projects\untitled.exe завершился с кодом 3


При нажатии на ошибку открывается пустой qvarlengtharray.h.

Есть у кого какие предположения почему это происходит?

И опять же такой эффект происходит при сборке только на Windows системах, на остальных все отлично.

Спасибо за ответы! 

Это сообщение отредактировал(а) loneybibi - 22.1.2012, 10:56


--------------------
Red Hat Fedora 17
Qt 4.8.1 (x64), GCC 4.4.3,
G++ 4.4.3, QtCreator 2.4.1
PM MAIL ICQ   Вверх
borisbn
Дата 22.1.2012, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

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



Судя по
Цитата(loneybibi @  22.1.2012,  10:52 Найти цитируемый пост)
ASSERT: "idx >= 0 && idx < s"

ошибка здесь
Цитата(loneybibi @  22.1.2012,  10:52 Найти цитируемый пост)
ui->tableView->selectRow(0);

Возможно, таблица ещё пустая и делать selectRow() со значением, большим, чем кол-во записей нельзя.
Попробуй (ради эксперимента) разнести эти строки (model->select() и table->selectRow()) на разные кнопки.
И (в любом случае) нужно проверять, что в таблице есть данные. Как-то так
Код

if ( table->rowCount() > 0 ) {
    table->selectRow( 0 );
}



--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
loneybibi
Дата 22.1.2012, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 28.5.2010
Где: Донецк (Украина)

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



Цитата(borisbn @  22.1.2012,  10:06 Найти цитируемый пост)
Возможно, таблица ещё пустая

Вот когда таблица пустая то этого не происходит даже если не проверять QSqlTableModel::rowCount.

Вылет происходит именно при QSqlTableModel::select();
и именно в дебаг режиме.
Разносил по разным кнопкам.

В таблице ничего особенного. несколько полей текстового типа и несколько числового.

Qt собрано на mingw, а почему ошибка происходит при обращении в Visual C++ Runtime Library, и вообще причем он тут? 
Может чего не хватает для Qt ведь я не ставил никаких дополнительных компонентов, только чистый Windows XP SP2 и сам QtSDK.


--------------------
Red Hat Fedora 17
Qt 4.8.1 (x64), GCC 4.4.3,
G++ 4.4.3, QtCreator 2.4.1
PM MAIL ICQ   Вверх
loneybibi
Дата 23.1.2012, 01:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 28.5.2010
Где: Донецк (Украина)

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



Поставил чистую систему Windows XP SP3 оригинал, установил последний QtSDK, собрал драйвер QMYSQL, собрал проект все тоже самое. Проверил на Win7SP1 тоже ошибка. Опять же в release сборке все нормально.

Потом создал чистый проект, подключился к той же таблице, сделал все по тому же принципу как и у меня все работает без проблем.
Значит буду искать проблемы у себя в коде. Что то там не так.

Если у кого еще есть предположения в какой стороне копать буду благодарен! smile
Еще интересно почему в release он игнорирует эту ошибку а в debug вылетает ?


--------------------
Red Hat Fedora 17
Qt 4.8.1 (x64), GCC 4.4.3,
G++ 4.4.3, QtCreator 2.4.1
PM MAIL ICQ   Вверх
loneybibi
  Дата 23.1.2012, 03:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 28.5.2010
Где: Донецк (Украина)

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



Пролистав все построчно через отладку нашел проблему.

Обращался к таблице QSqlTableModel:
Код

model->record(0).value("column4").toString();


Таких строчек одинаковых было много но вылетало именно на предпоследней (строки одинаковые, менялось только название колонки) почему так и не понял, мистика какая то. smile

Так вот хоть qDebug() и выводил что записей в таблице 4шт. происходил вылет (с выводом в консоль выше описанным)
как только я пытался взять значение ячейки.
Решение было просто как и порекомендовал borisbn в любом случаем проверять есть ли данные в таблице! Добавил
проверку:
Код

if(model->rowCount()>0){
     model->record(0).value("column4").toString();
}


И все стало работать нормально! 

Вывод: проверять наличие данных в таблице даже если вы уверенны что там что то есть! smile 

Но остался вопрос: почему release вариант сборки игнорировал это (и все работало отлично) а появлялось такое только при debug???

Это сообщение отредактировал(а) loneybibi - 23.1.2012, 03:22


--------------------
Red Hat Fedora 17
Qt 4.8.1 (x64), GCC 4.4.3,
G++ 4.4.3, QtCreator 2.4.1
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




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


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

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