我有2个版本的相同应用程序,在使用图形用户界面和QT的版本中我有运行时错误:
first-chance exception access violation writing location
指的是
this->secondi_totali = someint;
在模型方法中启动。我的Model类是:
class Model {
public:
friend class Controller; //dico che controller può accedere alle cose private
//friend class cronometro_qt;
/*costruttore*/
Model();
void set(int,int,int);
int get_secondi();
int get_minuti();
int get_ore();
void tick();
private:
int secondi_totali;
int secondi_trascorsi;
int secondi;
int minuti;
int ore;
};
导致异常的方法是:
void crono::Model::set(int ore, int minuti, int secondi) {
this->secondi_totali = ore * 3600 + 60 * minuti + secondi;
this->secondi_trascorsi = 0;
}
并在此方法中调用堆栈:
void crono::Controller::set(int ore, int minuti, int secondi) {
this->modello->set(ore, minuti, secondi);
}
this-> modello显然是指向Controller项中Model对象的指针。
正如我之前所说,我已经完成了我的程序的两个版本。
在第一个中,控制器的set()方法由一个简单的视图方法调用,该方法是一个空类。
在第二个版本中,控制器的set()方法由
调用void crono::cronometro_qt::on_pushButton_clicked() { /* ... */ }
方法
显然在这两个版本中,空视图或cronometro_qt(QMainWindow的子类)都有一个指向控制器的指针,以便像这样调用set()方法:
this->controller->set(ore,minuti, secondi);
那么为什么QT版本会抛出异常?
答案 0 :(得分:0)
在初始化变量之前输入应用程序的事件循环(a.exec())。 exec()在应用程序退出之前不会返回。将初始化移到a.exec()上面。