QT Critical error detected c0000374

8 篇文章 0 订阅

在使用QT写GraphicsView时,运行程序添加Item时,无缘无故报错了,debug调试也是跳到QT源码上面去,还都不是报同一个位置的错误,有些还是new的位置报错。而报错信息是“Critical error detected c0000374”,搜出来的文章也都是内存不足、越界之类,还有说用智能指针的问题,但以上问题我都没有。
当内存充足时,new还能报错,那应该是跟内存没多大关系了。加上在代码不改或者一些毫无影响的改动的情况下,报错还不是在同一个地方,我觉得可以排除内存不足、越界之类。

  1. 但程序蹦绝大部分又是跟指针有关,所以我把我类里面的指针变量注释了,结果运行一点问题都没有,而且我这指针的还是只定义了还没用,连赋值nullptr的操作都没有,真的奇了怪了。如下例1代码
//例1
//.h文件
class A{
int a;
int b;
int *p;//注释了,运行就没问题,不注释运行就蹦,打印的错误信息“Critical error detected c0000374”
int c;
...
int z;
}

//.cpp文件
A::A:a(0),b(1),c(2){}
  1. 我只把指针变量写在所有变量的后面,这么顺序一换,运行又没问题,我以为这就把问题解决了,结果只给这变量赋值nullptr就又蹦了。如下例2代码
//例2
//.h文件
class A{
int a;
int b;
int c;
...
int z;
int *p;
}

//.cpp文件
A::A:a(0),b(1),c(2),
p(nullptr)//注释就能运行,不注释运行就蹦,打印的错误信息“Critical error detected c0000374”
{}
  1. 一开始怀疑是不是变量类型的问题,但后面换了其他类型一样不行。怀疑会不会是因为.cpp文件数据有问题,于是新建了一个.h和.cpp文件,打算重新写原本那文件的代码,结果就只写成类似如下的代码,就是只写了原本.h文件变量定义和构建函数,其他的都没写,运行没问题,然后我就重新试了之前有问题的.h.cpp文件,发现也可以运行,一点问题都没有,代码一点都没改过,后面也试了改成之前出问题的样子,结果也是没问题。这个过程只是将源代码重新构建生成了,将以前的编译生成的任何文件都重新生成了一遍。因为Qt添加新文件之后,要重新 执行qmake->构建/运行/重新构建(或者 清除->构建/运行/重新构建),这个过程就将以前编译生成的.obj、ui_xxx等文件都重新按照现在的代码去生成了。所以我怀疑是之前编译生成的相关文件有问题,导致出现了“Critical error detected c0000374”的问题
//
//.h文件
class A{
int a;
int b;
int c;
...
int z;
int *p;
}

//.cpp文件
A::A:a(0),b(1),c(2),
p(nullptr)
{}

根据上面的猜测,排除内存、越界之类和智能指针的问题,可以尝试的解决方案:1、将之前编译生成的文件全部清除,并将所有内容再重新编译生成一遍。
2、将有问题的.h.cpp重新打一遍,最好别复制,避免文件数据有问题。复制有可能会把之前有问题的数据一起复制了。
3、先做2,再做1

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值