好久好久没写博客了……自从上次记录错误问题之后到现在,遇到的问题都通过百度等方式得到了解决,就懒得记录了。但这次出现的问题又是在网上搜了好久都没有解决的,现在终于解决了,于是记录下来。
问题的前因后果如下:
近期工作要求,我从年后开始用Qt,之前一直用的是VS,在Qt方面我就是个初学者,现在边学边用了两个月吧(年后复工开始正式用Qt)。但因为我比较熟悉C/C++,对于Qt我上手很快,算下来工作进度也还可以。
但最近出了个问题,我编译项目的时候没问题,但运行的时候就会报错:
RtlWerpReportException failed with status code :-1073741823. Will try to launch the process directly
我通过百度,得知该问题的本质是访问到非法的地址,导致该问题出现的原因有下标越界、访问了未分配的空间等,网上给出了很多解决方法,但没有跟我这里出现一样情况的(也有可能我太菜了,犯的是很幼稚的错误)。因为网上的解决方案很容易搜出来,具体哪些方法就不列了。
下面说一下我写的程序的情况。
我用的是Qt5.7.1,MSVC-2013版,工具是QtCreator,编译方式debug。项目用几个.pri文件分为了几部分,其中有一个存放数据的部分,里面的一个文件定义了一些类,类的结构大体是这样的(下面的内容是把问题关键简化后的内容,之后出现的代码也如此,就不特意说明了):
/* Data.h */
// 所有类都定义和实现了构造、析构函数
class A
{
private:
QString a_str;
public:
QString GetAStr(); // 获取a_str
void PrintA(); // 打印类A的内容
};
class B
{
private:
QString b_str;
QMap<QString, A*> b_map;
public:
QString GetBStr(); // 获取b_str
QMap<QString, A*> GetBMap(); // 获取b_map
void PrintB(); // 打印类B的内容
};
/
/* Data.cpp */
// ...
QString A::GetAStr()
{
return a_str; // 1
// QString temp_a = a_str; // 2
// return temp_a;