Qt奇怪报错总结

本文总结了在将qtweight转换为qml项目时遇到的sogoupinyin组件异常及0xC0000005访问冲突问题。通过修改内存分配和释放方式,成功解决了程序异常。同时更新了main.cpp文件,引入了QQuickWindow::setSceneGraphBackend以适配高分辨率屏幕,并注册了自定义类型。修复后的代码避免了访问冲突,确保了程序的稳定运行。
摘要由CSDN通过智能技术生成

导言

整理了下在qtweight转qml项目时的一些奇怪报错:

sogoupinyin\Components\程序异常结束。

注释了之后在之后还会出现0x0000000070310B1E (Qt5Cored.dll)处(位于 XTKJqml.exe 中)引发的异常: 0xC0000005: 读取位置 0xFFFFFFFFFFFFFFFF

原来:
//这里巨神奇,只有cout两次,ccy2,ccy3的数值才正确
   cout << ccy1 << endl << ccy2 << endl << ccy3 << endl;
   int wlen = 0;
   if (L == 0) {
       wlen = (Blen - 6) / 2;
   }
   else {
       UINT16 temp;
       fread(&temp, sizeof(UINT16), L, rfid);
       wlen = (Blen - 6 - 2 * L) / 2;
   }
   INT16 * ysda = new INT16[wlen];
   //vector<INT16> ys_da;
   fread(ysda, sizeof(INT16), wlen, rfid);

   vector<INT16> ys_da;
   for (int i = 0; i < wlen; i++) {
       ys_da.push_back(ysda[i]);
   }
   cout << ysda[0] << endl << ysda[1] << endl << ysda[2] << endl;
   cout << ccy1 << endl << ccy2 << endl << ccy3 << endl;
修正后:
int wlen = 0;
   if (L == 0) {
       wlen = (Blen - 6) / 2;
   }
   else {
       UINT16 * temp = new UINT16[L];
       fread(temp, sizeof(UINT16), L, rfid);
       wlen = (Blen - 6 - 2 * L) / 2;
   	   delete temp;
   }
   INT16 * ysda = new INT16[wlen];
   fread(ysda, sizeof(INT16), wlen, rfid);
   vector<INT16> ys_da;
   for (int i = 0; i < wlen; i++) {
       ys_da.push_back(ysda[i]);
   }

0x00007FF96FF3B922 (ig9icd64.dll)处(位于 ZTKJ_V3.exe 中)引发的异常: 0xC0000005: 读取位置 0xFFFFFFFFFFFFFFFF 时发生访问冲突。

之前的mian.cpp

#include <QGuiApplication>
#include <QQmlApplicationEngine>

int main(int argc, char *argv[])
{
   QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
   QGuiApplication app(argc, argv);

   QQmlApplicationEngine engine;
   engine.load(QUrl(QLatin1String("qrc:/main.qml")));
   if (engine.rootObjects().isEmpty())
       return -1;

   return app.exec();
}

之后的mian.cpp

#include <QApplication>
#include <QQmlApplicationEngine>
#include <QQuickWindow>
#include "include/sates.h"

int main(int argc, char *argv[])
{
   QQuickWindow::setSceneGraphBackend(QSGRendererInterface::Software);
#if defined(Q_OS_WIN)
   QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
#endif

   QApplication app(argc, argv);
   app.setWindowIcon(QIcon(":/pic/logoHJ.ico"));

   qmlRegisterType<Sates>("an.qml.SatesMouble", 1, 0, "Sates");

   QSurfaceFormat format;
   format.setDepthBufferSize(24);
   format.setStencilBufferSize(8);
   format.setVersion(3, 2);
   format.setProfile(QSurfaceFormat::CoreProfile);
   QSurfaceFormat::setDefaultFormat(format);

   QQmlApplicationEngine engine;
   engine.load(QUrl(QLatin1String("qrc:/main.qml")));
   if (engine.rootObjects().isEmpty())
       return -1;

   return app.exec();
}

注意

该文章仅个人学习使用,欢迎大家一起交流学习

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宇智波盆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值