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

Qt/C++退出,代码为-1073741819(程序崩溃,异常代码为c0000005),c++,windows,qt,exception,crash,C++,Windows,Qt,Exception,Crash,我的程序崩溃了。我知道Program.exe已经停止运行windows弹出窗口,其中提到我的异常代码是c0000005。当我返回Qt中应用程序的输出时,它显示: C:\Users\Me\Desktop\project\project-build-desktop\debug\project.exe exited with code -1073741819 我找到了导致错误的那条线,我想!,虽然我不知道为什么会这样。如果我把这行注释掉,程序就不会崩溃 电话是: db=newDb; 它位于我的类w

我的程序崩溃了。我知道Program.exe已经停止运行windows弹出窗口,其中提到我的异常代码是c0000005。当我返回Qt中应用程序的输出时,它显示:

C:\Users\Me\Desktop\project\project-build-desktop\debug\project.exe exited with code -1073741819
我找到了导致错误的那条线,我想!,虽然我不知道为什么会这样。如果我把这行注释掉,程序就不会崩溃

电话是:

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

但是,当打开/构造窗口时,不会发生异常/崩溃。它发生在窗户关闭时。更奇怪的是,它并不是每次都发生。有时,你可以打开窗口,然后关闭它而不出问题,然后再打开它,在第二次关闭时,它崩溃了。其他时候,当你第一次尝试关闭它时,它就会发生


我真的不知道这里发生了什么,希望有人能帮忙

最有可能导致崩溃的不是db=newDb行本身,而是稍后执行的一些其他代码,如果不设置db值,这些代码就不会执行。看看wndChildWhatever类中的其他代码,看看它对db值做了什么。也许它在做一些顽皮的事情,比如在其他代码仍在使用它时删除它?

错误行:

db=newDb;
你说:

db是wndChild的私人成员
听起来您的此指针可能无效。也就是说,如果在方法foo中发生这种情况,您正在执行类似于wndChild->foo的操作,并且wndChild是无效指针。因此,当它访问db相对于wndChild的偏移量时,您遇到了访问冲突。NT错误代码0xc0000005,Windows表示指针解引用错误。

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

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

您忘记了第42行的毛巾操作符。请在调试器中运行程序。当AV发生时,它将立即停止,不涉及猜测。它还将为您提供调用堆栈,还可能提供本地变量。我不能使用它,如果我没有正确地分配,分配它崩溃我的程序。现在,Wndchildwhat非常简单。不过,我会继续玩下去,看看是否能找到更好的问题根源。谢谢你的意见!嗯,当所有其他方法都失败时,试着做一次“干净”的尝试;制作有时候,一个对象文件没有在应该的时候被重新编译,奇怪的事情发生了,我相信这就是发生的事情。我在玩我的代码,并在wndChild解构器中添加了一个QMessageBox,以查看程序是否在该窗口的解构器中崩溃,或者解构器后在其他函数中发生了什么。当我这样做时,程序停止崩溃。当我注释掉QMessageBox时,我仍然能得到它!我在Qt中重建了所有的东西,从那以后就没有问题了。我也这么想,只是他说他的命令发生在wndChild构造函数中。在构造函数中使用无效的this指针并不容易,我认为…@Jeremy Friesner-也许他的类是在堆栈上分配的,并且存在溢出。或者可能在其他行中,他设法将其传递给执行删除操作的其他代码段。。。