这个问题本人搞了两三天才搞出来,在网上看到的教程大多是说:
把任务管理器打开,然后关掉运行的进程就行,如果这也不行就只能重启了(本人电脑也重启10多次了)。
还搜到有的人说确保 debug 文件夹(以及上级文件夹)对当前用户有写入权限。你可以在资源管理器中右键点击 debug 文件夹,选择“属性”,然后在“安全性”选项卡中,确保当前用户拥有写入权限。
还有的人说一些防病毒软件可能会干扰文件的创建和写入操作。尝试临时禁用防病毒软件,然后重新构建项目,看看问题是否得以解决。
总之各种各样,五花八门,虽然以上所说的有的能用,但是这不是解决代码的问题,像是解决编译器的问题。而且我的问题更加特殊。
我所遇到的问题是:在任务管理器中根本找不到我正在运行的程序,没错,是根本找不到(所以我开始时也只能重启来解决问题)
当我想要把test1.exe文件删除时,它又报错
可以看到在任务管理器中并没有发现它运行的身形,当然我我在别处看到说有些恶意软件或者系统问题可能会导致进程在任务管理器中被隐藏。这时,可以尝试使用其他工具来检测隐藏的进程。(这种方法我没用)
OK,废话讲完,开始正文
先上测试代码,我创建了一个项目,项目名为test1,类名为MainWindow,基类选择的是MainWindow,MainWindow.h文件没有更改,直接用的生成的代码
MainWindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QPushButton>
QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
QPushButton* m_pButtonMin;
QPushButton* m_pButtonMax;
};
#endif // MAINWINDOW_H
MainWindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QVBoxLayout>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
//new一个对象
m_pButtonMin = new QPushButton(this);
//设置对象名
m_pButtonMin->setObjectName("ButtonMin");
m_pButtonMax->setObjectName("ButtonMax");
//设置布局
QVBoxLayout* mylayout = new QVBoxLayout(this);
mylayout->addWidget(m_pButtonMin);
mylayout->addWidget(m_pButtonMax);
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
代码很简单,应该一眼就能发现问题,当代码运行时,会报以下的错误,程序直接崩溃了。
崩溃的原因就是我访问空指针了。即使用了m_pButtonMAX。在我编译时也没有报错。那是因为Qt程序在编译阶段,对于指针的空指针访问通常不会产生编译错误。编译器不会检查指针是否为null,因为指针的空值通常是在运行时才能确定的。
而且在Qt中,空指针访问会导致程序崩溃或出现未定义的行为,就像在标准C++中一样。Qt框架本身并不会阻止空指针访问或提供特殊的保护机制来捕获空指针引用。因此,如果你在Qt程序中对空指针进行解引用或访问其成员,程序很可能会崩溃。就像我运行的一样
将上述MainWindow.cpp文件中添加一个m_pButtonMAX的初始化就行了,添加后运行
更改过后可以看到程序可以正常运行,而且在任务管理器中也可以找到它
所以呢各位由于Qt本身并不能完全防止空指针访问,因此在编写Qt程序时,确保对指针进行空指针检查是很重要的实践。
解决方法:看看你的代码有没有问题,尤其是访问空指针的问题