插槽后Qt访问冲突0xC0000005

时间:2013-02-12 16:22:24

标签: c++ qt qt4

我有一个问题,我只知道该怎么做,所以也许你可以帮助我。

我正在开发一个连接数据库的应用程序,显示值并允许用户更新/插入值。

我有一个QTabView,其中一个标签中有四个QTableWidget。 在这个表中有时(取决于数据库的值)a QComboBox来选择一些预定义的值。 我使用QComboBox::selectedIndexChanged(int)抓住QSignalMapper并将slotQSignalMapper相关联,以便提供一些信息表以及更改的设置。我不时创建SettingsMapper new(并在此之前删除它)以重置'过时'的mapper-combobox连接。

所以问题是,当我更改组合框内的索引时,插槽被调用,我可以调试到信号/插槽连接切换的moc _ * .cpp,但之后我得到了{ {1}}在dlls内部。

这里是调用堆栈:

access violation on address 0xC0000005

`

让我感到好奇的是,在另一个标签中,一个QtCored4.dll!6721af70() [Frames below may be incorrect and/or missing, no symbols loaded for QtCored4.dll] QtCored4.dll!67219fe5() QtCored4.dll!67218f14() QtCored4.dll!67218e48() QtCored4.dll!6721903d() QtCored4.dll!6720f874() QtCored4.dll!6702429b() QtCored4.dll!670316f3() QtGuid4.dll!655b93f1() QtGuid4.dll!650f99d0() user32.dll!7e41885a() user32.dll!7e41882a() user32.dll!7e42b326() msctf.dll!7472467f() user32.dll!7e43e1ad() user32.dll!7e43e18a() QtCored4.dll!67234b9c() user32.dll!7e42b372() user32.dll!7e418734() user32.dll!7e418816() user32.dll!7e4189cd() user32.dll!7e418a10() QtCored4.dll!672359b6() ntdll.dll!7c90cfdc() ntdll.dll!7c958e0d() ntdll.dll!7c95932a() ntdll.dll!7c90cfdc() ntdll.dll!7c9594ca() ntdll.dll!7c919ca7() ntdll.dll!7c918f01() ntdll.dll!7c91925d() ntdll.dll!7c918f01() ntdll.dll!7c9101bb() ntdll.dll!7c9192ef() ntdll.dll!7c918f01() ntdll.dll!7c9101bb() user32.dll!7e4277b0() user32.dll!7e4277f7() ntdll.dll!7c90da0c() kernel32.dll!7c8024c7() msctf.dll!74725951() msctf.dll!74725956() user32.dll!7e418a80() user32.dll!7e418734() user32.dll!7e418816() ntdll.dll!7c96c6a7() QtCored4.dll!6723c8f6() datProgram.exe!__tmainCRTStartup() Line 578 + 0x35 bytes C datProgram.exe.exe!WinMainCRTStartup() Line 403 C kernel32.dll!7c817067() 具有与上述相同的方法,但问题不会发生在那里。 当在发布版本(Ctrl + F5)中运行时,问题似乎也消失了......ò.Ó

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

  

我不时创建SettingsMapper   要重置的新(并在之前删除它)   '过时'的mapper-combobox连接。

你是否有机会从信号映射器发出的信号调用的插槽中删除信号映射器?这是不允许的,当您当前在该实例的方法中时,无法删除该实例。

解决方案是使用deleteLater()代替。这将导致在控件返回事件循环时删除该对象。