Название: query.exec Segmentation fault Отправлено: polina89 от Март 30, 2014, 01:19 Здравствуйте!Помогите, пожалуйста. Пишу простейший запрос.
Код: QSqlQuery query(QSqlDatabase::database("mydb")); Вот стек вызовов. :) Thread 1 (Thread 6004.0x1434): #0 0x0b767e36 in load<int> (_q_value=@0x80000004: <error reading variable>) at ../../include/QtCore/../../src/corelib/thread/qgenericatomic.h:96 No locals. #1 QBasicAtomicInteger<int>::load (this=0x80000004) at ../../include/QtCore/../../src/corelib/thread/qbasicatomic.h:141 No locals. #2 0x0b767811 in QWeakPointer<QObject>::data (this=0x172df658) at ../../include/QtCore/../../src/corelib/tools/qsharedpointer_impl.h:556 No locals. #3 0x0b76a167 in QPointer<QSqlDriver>::data (this=0x172df658) at ../../include/QtCore/../../src/corelib/kernel/qpointer.h:78 No locals. #4 0x0b76a17f in QPointer<QSqlDriver>::operator QSqlDriver* (this=0x172df658) at ../../include/QtCore/../../src/corelib/kernel/qpointer.h:84 No locals. #5 0x0b749491 in QSqlResult::driver (this=0x172df650) at kernel\qsqlresult.cpp:373 d = 0x172df650 #6 0x0b742122 in QSqlQuery::driver (this=0x28c4f8) at kernel\qsqlquery.cpp:458 No locals. #7 0x0b741c45 in QSqlQuery::exec (this=0x28c4f8, query=...) at kernel\qsqlquery.cpp:356 fo = 128 __PRETTY_FUNCTION__ = "bool QSqlQuery::exec(const QString&)" #8 0x0042ba14 in MainWindow::on_AllTableView_clicked (this=0x28fd9c, index=...) at ..\sources\mainwindow.cpp:644 i = 0 queryPhoto = {d = 0x17483dc8} data = {d = 0x28c548} transitid = 48 query = {d = 0x172df650} Название: Re: query.exec Segmentation fault Отправлено: Nidxogg от Март 30, 2014, 18:20 Цитировать QSqlDatabase::database("mydb") Само подключение к базе открыто?Многопоточное приложение? Название: Re: query.exec Segmentation fault Отправлено: polina89 от Март 30, 2014, 18:37 Код: QSqlDatabase::database("mydb").isOpen(); Название: Re: query.exec Segmentation fault Отправлено: Old от Март 30, 2014, 18:52 Для каждого потока делайте свое подключение.
Название: Re: query.exec Segmentation fault Отправлено: polina89 от Март 30, 2014, 20:32 Но ведь эта часть обрабатывается в главном потоке. Этот кусок отрабатывает в самом начале работы программы. То есть в этот момент никаких других потоков кроме главного по идее еще не запущено.Но за совет спасибо!Буду иметь в виду :)
Название: Re: query.exec Segmentation fault Отправлено: Old от Март 30, 2014, 20:40 Но ведь эта часть обрабатывается в главном потоке. Этот кусок отрабатывает в самом начале работы программы. То есть в этот момент никаких других потоков кроме главного по идее еще не запущено.Но за совет спасибо!Буду иметь в виду :) Попробуйте скопировать этот кусок и создание подключения в отдельный тестовый проектик. И проверите, если будет падать в том же месте, то выкладывайте его сюда, а если не будет, то где то раньше (не в этом месте) вы что то делаете не так.Название: Re: query.exec Segmentation fault Отправлено: polina89 от Март 30, 2014, 21:03 В тестовом проекте все работает. :(Как можно раскопать, где ошибка? Я в таком случае даже не имею представления, с чего начать((((Ну то есть я комментирую отдельные участки кода, в надежде, что ошибка именно там.Но пока ничего не выходит(
Название: Re: query.exec Segmentation fault Отправлено: Old от Март 30, 2014, 21:09 Как можно раскопать, где ошибка? Я в таком случае даже не имею представления, с чего начать(((( В таком случае, 90% что ошибка в битой памяти. :)Если есть возможность работать под linux, то запустите программу под valgrind. Нет, пробуйте все за комментировать, потом по частям убирать комментарии и смотрите, когда начнет падать. Название: Re: query.exec Segmentation fault Отправлено: polina89 от Март 30, 2014, 21:16 Спасибо!Возможности запустить под linux нет( Пытаюсь как раз методом комментирования понять, где ошибка.Единственное, что заметила, что этот код у меня для вот этого слота:
Код: void MainWindow::on_AllTableView_clicked(const QModelIndex &index) Название: Re: query.exec Segmentation fault Отправлено: Old от Март 30, 2014, 21:25 Т.е. пока вы не нажмете кнопку, программа работает корректно, нормально завершается?
Ну такие вещи нужно обязательно проверять, или assert'ами или if ... return. Название: Re: query.exec Segmentation fault Отправлено: polina89 от Март 30, 2014, 21:30 Да, все верно)Пока не тыкну мышкой на строку, то все отлично.
Название: Re: query.exec Segmentation fault Отправлено: Old от Март 30, 2014, 21:30 Да, все верно)Пока не тыкну мышкой на строку, то все отлично. Покажите весь метод.Название: Re: query.exec Segmentation fault Отправлено: polina89 от Март 30, 2014, 21:48 Код: void MainWindow::on_AllTableView_clicked(const QModelIndex &index) Название: Re: query.exec Segmentation fault Отправлено: gil9red от Март 30, 2014, 21:52 Код: transitid=AllTransits->data(AllTransits->index(index.row(),0)).toInt(); Название: Re: query.exec Segmentation fault Отправлено: Old от Март 30, 2014, 21:55 А в таблице уже есть элементы, которые вы очищаете в начале?
index нужно проверять на валидность и выходить если он "плох". Зачем делать clear для только что созданного QSqlQuery? Название: Re: query.exec Segmentation fault Отправлено: polina89 от Март 30, 2014, 22:21 Поставила проверку на валидность индекса. Индекс в итоге валидный. Вероятно, просто в отладчике он что-то не то показывает. То есть в строке
Код: transitid=AllTransits->data(AllTransits->index(index.row(),0)).toInt(); В таблице уже есть элементы.Они создаются в самом начале в конструкторе. Убрала clear у обоих запросов. Теперь приложение вылетает не при исполнении запросов, а приблизительно при выходе из обработчика события. Но при всем при этом в якобы выполненных запросах нет никакие данных((( То есть отладчик выдает сообщение QSqlQuery::value: not positioned on a valid record Название: Re: query.exec Segmentation fault Отправлено: Old от Март 30, 2014, 22:28 Проверяйте результат выполнения QSqlQuery::exec и в случае не успеха смотрите ошибку.
Название: Re: query.exec Segmentation fault Отправлено: polina89 от Март 30, 2014, 22:39 В том-то и дело, что запрос выполнен, ошибки нет, да и данных тоже нет(
Название: Re: query.exec Segmentation fault Отправлено: polina89 от Март 30, 2014, 22:49 И вот еще такая мистика...Программа работает через раз. То есть первый раз при нажатии на строку в QTableView все отлично, второй раз программа вылетает, третий раз опять все отлично( :'( :'( :'(
Название: Re: query.exec Segmentation fault Отправлено: Alex Custov от Март 30, 2014, 23:13 И вот еще такая мистика...Программа работает через раз. То есть первый раз при нажатии на строку в QTableView все отлично, второй раз программа вылетает, третий раз опять все отлично( :'( :'( :'( битая память налицо Название: Re: query.exec Segmentation fault Отправлено: polina89 от Март 30, 2014, 23:14 Я догадывалась о таком исходе, но отловить пока не получается(
Единственное, что смущает, так это то, что при отладке возникают вот такие сообщения. Практически с самого запуска программы. (Internal error: pc 0x0 in read in psymtab, but not in symtab.) (Internal error: pc 0x0 in read in psymtab, but not in symtab.) (Internal error: pc 0x0 in read in psymtab, but not in symtab.) (Internal error: pc 0x0 in read in psymtab, but not in symtab.) (Internal error: pc 0x0 in read in psymtab, but not in symtab.) (Internal error: pc 0x0 in read in psymtab, but not in symtab.) (Internal error: pc 0x0 in read in psymtab, but not in symtab.) (Internal error: pc 0x0 in read in psymtab, but not in symtab.) (Internal error: pc 0x0 in read in psymtab, but not in symtab.) (Internal error: pc 0x0 in read in psymtab, but not in symtab.) (Internal error: pc 0x0 in read in psymtab, but not in symtab.) (Internal error: pc 0x0 in read in psymtab, but not in symtab.) (Internal error: pc 0x0 in read in psymtab, but not in symtab.) (Internal error: pc 0x0 in read in psymtab, but not in symtab.) (Internal error: pc 0x0 in read in psymtab, but not in symtab.) (Internal error: pc 0x0 in read in psymtab, but not in symtab.) (Internal error: pc 0x0 in read in psymtab, but not in symtab.) (Internal error: pc 0x0 in read in psymtab, but not in symtab.) (Internal error: pc 0x0 in read in psymtab, but not in symtab.) (Internal error: pc 0x0 in read in psymtab, but not in symtab.) (Internal error: pc 0x0 in read in psymtab, but not in symtab.) (Internal error: pc 0x0 in read in psymtab, but not in symtab.) (Internal error: pc 0x0 in read in psymtab, but not in symtab.) (Internal error: pc 0x0 in read in psymtab, but not in symtab.) (Internal error: pc 0x0 in read in psymtab, but not in symtab.) (Internal error: pc 0x0 in read in psymtab, but not in symtab.) (Internal error: pc 0x0 in read in psymtab, but not in symtab.) (Internal error: pc 0x0 in read in psymtab, but not in symtab.) (Internal error: pc 0x0 in read in psymtab, but not in symtab.) (Internal error: pc 0x0 in read in psymtab, but not in symtab.) can't find linker symbol for virtual table for `MainWindow' value can't find linker symbol for virtual table for `MainWindow' value (Internal error: pc 0x0 in read in psymtab, but not in symtab.) (Internal error: pc 0x0 in read in psymtab, but not in symtab.) can't find linker symbol for virtual table for `MainWindow' value can't find linker symbol for virtual table for `MainWindow' value can't find linker symbol for virtual table for `MainWindow' value can't find linker symbol for virtual table for `MainWindow' value can't find linker symbol for virtual table for `MainWindow' value can't find linker symbol for virtual table for `MainWindow' value can't find linker symbol for virtual table for `MainWindow' value can't find linker symbol for virtual table for `MainWindow' value can't find linker symbol for virtual table for `MainWindow' value can't find linker symbol for virtual table for `MainWindow' value (Internal error: pc 0x0 in read in psymtab, but not in symtab.) (Internal error: pc 0x0 in read in psymtab, but not in symtab.) (Internal error: pc 0x0 in read in psymtab, but not in symtab.) (Internal error: pc 0x0 in read in psymtab, but not in symtab.) (Internal error: pc 0x0 in read in psymtab, but not in symtab.) (Internal error: pc 0x0 in read in psymtab, but not in symtab.) (Internal error: pc 0x0 in read in psymtab, but not in symtab.) (Internal error: pc 0x0 in read in psymtab, but not in symtab.) (Internal error: pc 0x0 in read in psymtab, but not in symtab.) (Internal error: pc 0x0 in read in psymtab, but not in symtab.) (Internal error: pc 0x0 in read in psymtab, but not in symtab.) (Internal error: pc 0x0 in read in psymtab, but not in symtab.) (Internal error: pc 0x0 in read in psymtab, but not in symtab.) (Internal error: pc 0x0 in read in psymtab, but not in symtab.) (Internal error: pc 0x0 in read in psymtab, but not in symtab.) (Internal error: pc 0x0 in read in psymtab, but not in symtab.) (Internal error: pc 0x0 in read in psymtab, but not in symtab.) (Internal error: pc 0x0 in read in psymtab, but not in symtab.) (Internal error: pc 0x0 in read in psymtab, but not in symtab.) (Internal error: pc 0x0 in read in psymtab, but not in symtab.) (Internal error: pc 0x0 in read in psymtab, but not in symtab.) (Internal error: pc 0x0 in read in psymtab, but not in symtab.) (Internal error: pc 0x0 in read in psymtab, but not in symtab.) (Internal error: pc 0x0 in read in psymtab, but not in symtab.) (Internal error: pc 0x0 in read in psymtab, but not in symtab.) (Internal error: pc 0x0 in read in psymtab, but not in symtab.) (Internal error: pc 0x0 in read in psymtab, but not in symtab.) (Internal error: pc 0x0 in read in psymtab, but not in symtab.) (Internal error: pc 0x0 in read in psymtab, but not in symtab.) (Internal error: pc 0x0 in read in psymtab, but not in symtab.) Как это расшифровать и постараться найти источник проблемы?) |