Qt / C ++退出代码-1073741819(程序崩溃,异常代码为c0000005)

时间:2010-11-10 00:40:08

标签: c++ windows qt exception crash

我遇到程序崩溃的问题。我得到“Program.exe已停止工作”窗口弹出窗口,其中提到我的异常代码是c0000005。当我在Qt中返回应用程序的输出时,它显示:

C:\Users\Me\Desktop\project\project-build-desktop\debug\project.exe exited with code -1073741819

我发现导致错误的行(我想!),虽然我不知道为什么会这样。如果我注释掉这一行,该程序将不会崩溃。

该行是:

db=newDb;

它位于我的类wndChildWhatever的构造函数中,它是一个QMainWindow。 newDb在构造函数参数中定义为DatabaseManager *newDbdb是wndChild的私有成员,定义为DatabaseManager *db。这个数据库地址遍布我的程序,这wndChildWhatever是唯一一个我遇到麻烦的地址。

但是,打开/构建窗口时不会发生异常/崩溃。窗口关闭时会发生这种情况。更奇怪的是,每次都不会发生这种情况。有时您可以打开窗口并关闭它而不用问题,然后再次打开它,在第二次关闭时,它会崩溃。其他时候它会在您第一次尝试关闭时发生。

我真的不确定这里发生了什么,希望有人能帮忙!

4 个答案:

答案 0 :(得分:2)

断层线:

db=newDb;

你说:

和db是wndChild的私有成员

听起来你的this指针可能无效。也就是说,如果在方法foo中发生这种情况,您执行wndChild->foo()之类的操作,而wndChild则是无效指针。因此,当它访问db相对于wndChild的偏移时,您会遇到访问冲突。 (NT错误代码0xc0000005,Windows代表错误的指针取消引用。)

答案 1 :(得分:0)

很可能不是导致崩溃的db = newDb行本身,而是稍后执行的其他一些代码,如果你没有设置db值,它就不会被执行。查看wndChildWhatever类中的其他代码,并查看它对(db)值的作用。也许它正在做一些顽皮的事情,比如删除它而其他代码仍在使用它?

答案 2 :(得分:0)

使用db = newDb行,您有两个指向同一对象的指针。你在析构函数中做了什么?如果您有“删除db”和“删除newDb”,则删除相同的对象两次,这可能会导致崩溃。

答案 3 :(得分:-3)

尝试删除构建目录并重建它。它对我有用,但每次我向任何一个类添加一个新函数或成员时我都需要这样做。 Idk为什么。