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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Проблема с ALSA  (Прочитано 3931 раз)
sergebegger
Гость
« : Июль 04, 2010, 14:54 »

Помогите пожалуйста, куда копать?
При изменении Volume - segmentation fault
Исходники прилагаются.....
Записан
Rcus
Гость
« Ответ #1 : Июль 04, 2010, 15:46 »

Valgrind же
Цитировать
==23310== Use of uninitialised value of size 8
==23310==    at 0x4041BA: MainWindow::setVolume(int) (mainwindow.cpp:20)
==23310==    by 0x4095BE: MainWindow::qt_metacall(QMetaObject::Call, int, void**) (moc_mainwindow.cpp:72)
==23310==    by 0x5F26E3E: QMetaObject::activate(QObject*, QMetaObject const*, int, void**) (qobject.cpp:3293)
==23310==    by 0x5968BDD: QAbstractSlider::valueChanged(int) (moc_qabstractslider.cpp:182)
==23310==    by 0x5721CAB: QSlider::mouseMoveEvent(QMouseEvent*) (qslider.cpp:514)
==23310==    by 0x53231DE: QWidget::event(QEvent*) (qwidget.cpp:7983)
==23310==    by 0x52CD22B: QApplicationPrivate::notify_helper(QObject*, QEvent*) (qapplication.cpp:4300)
==23310==    by 0x52D3ECA: QApplication::notify(QObject*, QEvent*) (qapplication.cpp:3865)
==23310==    by 0x5F1406B: QCoreApplication::notifyInternal(QObject*, QEvent*) (qcoreapplication.cpp:704)
==23310==    by 0x52D30AD: QApplicationPrivate::sendMouseEvent(QWidget*, QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer<QWidget>&, bool) (qcoreapplication.h:215)
==23310==    by 0x5352F64: QETWidget::translateMouseEvent(_XEvent const*) (qapplication_x11.cpp:4368)
==23310==    by 0x53518AB: QApplication::x11ProcessEvent(_XEvent*) (qapplication_x11.cpp:3501)
==23310==
==23310== Invalid read of size 8
==23310==    at 0x4041BA: MainWindow::setVolume(int) (mainwindow.cpp:20)
==23310==    by 0x4095BE: MainWindow::qt_metacall(QMetaObject::Call, int, void**) (moc_mainwindow.cpp:72)
==23310==    by 0x5F26E3E: QMetaObject::activate(QObject*, QMetaObject const*, int, void**) (qobject.cpp:3293)
==23310==    by 0x5968BDD: QAbstractSlider::valueChanged(int) (moc_qabstractslider.cpp:182)
==23310==    by 0x5721CAB: QSlider::mouseMoveEvent(QMouseEvent*) (qslider.cpp:514)
==23310==    by 0x53231DE: QWidget::event(QEvent*) (qwidget.cpp:7983)
==23310==    by 0x52CD22B: QApplicationPrivate::notify_helper(QObject*, QEvent*) (qapplication.cpp:4300)
==23310==    by 0x52D3ECA: QApplication::notify(QObject*, QEvent*) (qapplication.cpp:3865)
==23310==    by 0x5F1406B: QCoreApplication::notifyInternal(QObject*, QEvent*) (qcoreapplication.cpp:704)
==23310==    by 0x52D30AD: QApplicationPrivate::sendMouseEvent(QWidget*, QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer<QWidget>&, bool) (qcoreapplication.h:215)
==23310==    by 0x5352F64: QETWidget::translateMouseEvent(_XEvent const*) (qapplication_x11.cpp:4368)
==23310==    by 0x53518AB: QApplication::x11ProcessEvent(_XEvent*) (qapplication_x11.cpp:3501)
==23310==  Address 0x56 is not stack'd, malloc'd or (recently) free'd
==23310==
==23310==
==23310== Process terminating with default action of signal 11 (SIGSEGV)
==23310==  Access not within mapped region at address 0x56
==23310==    at 0x4041BA: MainWindow::setVolume(int) (mainwindow.cpp:20)
==23310==    by 0x4095BE: MainWindow::qt_metacall(QMetaObject::Call, int, void**) (moc_mainwindow.cpp:72)
==23310==    by 0x5F26E3E: QMetaObject::activate(QObject*, QMetaObject const*, int, void**) (qobject.cpp:3293)
==23310==    by 0x5968BDD: QAbstractSlider::valueChanged(int) (moc_qabstractslider.cpp:182)
==23310==    by 0x5721CAB: QSlider::mouseMoveEvent(QMouseEvent*) (qslider.cpp:514)
==23310==    by 0x53231DE: QWidget::event(QEvent*) (qwidget.cpp:7983)
==23310==    by 0x52CD22B: QApplicationPrivate::notify_helper(QObject*, QEvent*) (qapplication.cpp:4300)
==23310==    by 0x52D3ECA: QApplication::notify(QObject*, QEvent*) (qapplication.cpp:3865)
==23310==    by 0x5F1406B: QCoreApplication::notifyInternal(QObject*, QEvent*) (qcoreapplication.cpp:704)
==23310==    by 0x52D30AD: QApplicationPrivate::sendMouseEvent(QWidget*, QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer<QWidget>&, bool) (qcoreapplication.h:215)
==23310==    by 0x5352F64: QETWidget::translateMouseEvent(_XEvent const*) (qapplication_x11.cpp:4368)
==23310==    by 0x53518AB: QApplication::x11ProcessEvent(_XEvent*) (qapplication_x11.cpp:3501)
hint: line 10
Записан
sergebegger
Гость
« Ответ #2 : Июль 04, 2010, 15:57 »

Спасибо за подсказку про Valgrind  - gdb такого не показал.
А нельзя-ли поконкретнее ткнуть носом?  Веселый

Записан
sergebegger
Гость
« Ответ #3 : Июль 04, 2010, 16:06 »

А у меня картина другая.....
Цитировать
==12223== Invalid read of size 4
==12223==    at 0x804ADB7: MainWindow::setVolume(int) (mainwindow.cpp:20)
==12223==    by 0x804FC0F: MainWindow::qt_metacall(QMetaObject::Call, int, void**) (moc_mainwindow.cpp:72)
==12223==    by 0x513F5DA: QMetaObject::metacall(QObject*, QMetaObject::Call, int, void**) (in /usr/lib/libQtCore.so.4.6.2)
==12223==    by 0x514E4AE: QMetaObject::activate(QObject*, QMetaObject const*, int, void**) (in /usr/lib/libQtCore.so.4.6.2)
==12223==    by 0x5BDE8D3: QAbstractSlider::valueChanged(int) (in /usr/lib/libQtGui.so.4.6.2)
==12223==    by 0x58F4925: QAbstractSlider::setValue(int) (in /usr/lib/libQtGui.so.4.6.2)
==12223==    by 0x58F49FD: QAbstractSlider::triggerAction(QAbstractSlider::SliderAction) (in /usr/lib/libQtGui.so.4.6.2)
==12223==    by 0x58F4EB8: QAbstractSlider::setSliderPosition(int) (in /usr/lib/libQtGui.so.4.6.2)
==12223==    by 0x5995638: QSlider::mouseMoveEvent(QMouseEvent*) (in /usr/lib/libQtGui.so.4.6.2)
==12223==    by 0x556CF0E: QWidget::event(QEvent*) (in /usr/lib/libQtGui.so.4.6.2)
==12223==    by 0x58F4794: QAbstractSlider::event(QEvent*) (in /usr/lib/libQtGui.so.4.6.2)
==12223==    by 0x5995CDE: QSlider::event(QEvent*) (in /usr/lib/libQtGui.so.4.6.2)
==12223==  Address 0x0 is not stack'd, malloc'd or (recently) free'd
Записан
sergebegger
Гость
« Ответ #4 : Июль 04, 2010, 16:40 »

Интересный момент - кто-же kill-яет микшер?
И как его от этого оградить?
Вот такой вариант работает...
Код:
void MainWindow::setVolume(int value)
{
    alsaMixer *amixer = new alsaMixer();
    amixer->setVolume(value,value);
}
но правильно-ли это?
Записан
Rcus
Гость
« Ответ #5 : Июль 04, 2010, 20:08 »

Что значит другая? Различие в размере в сообщении Invalid read of size 8 объясняется отличием в размере указателя. mainwindow.cpp:20 - вызов виртуального метода, значит ошибка произошла во время доступа к vtbl, что в данном случае является следствием обращения к неинициализированному указателю на объект. "hint: line 10" указывал на mainwindow.cpp:10, где вы вместо инициализации MainWindow::amixer создали локальную переменную.

Всё это выводится из первого сообщения, куда еще точнее?
Записан
sergebegger
Гость
« Ответ #6 : Июль 06, 2010, 01:36 »

"Учиться, учиться, и ещё раз учиться"((с) однако В.И. Ленин ) - для меня это до сих пор актуально..... Спасибо, разобрался....
« Последнее редактирование: Июль 06, 2010, 01:39 от sergebegger » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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