我遇到程序崩溃的问题。我得到“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 *newDb
,db
是wndChild的私有成员,定义为DatabaseManager *db
。这个数据库地址遍布我的程序,这wndChildWhatever
是唯一一个我遇到麻烦的地址。
但是,打开/构建窗口时不会发生异常/崩溃。窗口关闭时会发生这种情况。更奇怪的是,每次都不会发生这种情况。有时您可以打开窗口并关闭它而不用问题,然后再次打开它,在第二次关闭时,它会崩溃。其他时候它会在您第一次尝试关闭时发生。
我真的不确定这里发生了什么,希望有人能帮忙!
答案 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为什么。