当前位置: 首页 > news >正文

深圳市建设局官方网站能力建设和继续教育中心网站

深圳市建设局官方网站,能力建设和继续教育中心网站,微网站与移动开发是做什么的,开发手机app用什么语言前言 最近一直在做QT开发#xff0c;编程环境是VS2017和QT5.11.2 经常遇到的问题就是#xff0c;在VS中调试程序#xff0c;前面都是正常运行的#xff0c;但是当关闭窗口#xff0c;退出程序的时候#xff0c;VS会抛出一个异常 “未加载ntdll.pdb#xff0c;触发了一…前言 最近一直在做QT开发编程环境是VS2017和QT5.11.2 经常遇到的问题就是在VS中调试程序前面都是正常运行的但是当关闭窗口退出程序的时候VS会抛出一个异常 “未加载ntdll.pdb触发了一个断点” “未加载ucrtbase.pdb0x00007FF8E2F1DF28 (ucrtbase.dll) (Test.exe 中)处有未经处理的异常: 将一个无效参数传递给了将无效参数视为严重错误的函数” 等等类似的未加载xxx.pdb的错误。 这种错误产生的原因就是由于发生了未定义的行为。 未定义行为 未定义的行为是什么 在C以及其他编程语言中“未定义的行为”Undefined Behavior简称 UB是指语言标准没有为某些代码行为提供明确的规范或定义因此编译器不必为这种行为提供任何特定的支持或保证。 当代码触发未定义的行为时可能会发生以下情况之一或更多 程序崩溃例如通过无效指针引用内存不可预测的输出程序可能会产生意外的结果随机行为程序在不同的运行或在不同的平台上可能表现不同安全漏洞攻击者可能会利用未定义的行为来执行恶意操作似乎“正常”工作有时未定义的行为可能不会立即显现出任何问题但这不意味着问题不存在。在不同的情况、不同的编译器优化级别或不同的平台上问题可能会突然显现。 一些常见的引起未定义行为的操作包括 解引用空指针访问越界的数组元素读取未初始化的变量对一个对象使用 delete 多次整数溢出在某些情况下例如有符号整数。 产生原因以及解决 现在我说下我遇到的产出未定义行为的两个原因以及解决方法。 原因一尝试删除同一个实例两次 我在代码中使用了QT的第三方库QWT我在给我的qwtPlot设置坐标轴的时候使用了下面的语句。 QwtLinearScaleEngine* scaleEngine new QwtLinearScaleEngine(); scaleEngine-setAttribute(QwtScaleEngine::Floating); ui-qwtPlot-setAxisScaleEngine(QwtPlot::xBottom, scaleEngine); ui-qwtPlot-setAxisScaleEngine(QwtPlot::yLeft, scaleEngine);这样会产生一个异常 产生的原因是 我为代码中的 Qwt 创建了一个新的 QwtLinearScaleEngine 并设置了其属性然后将其设置为 qwtPlot 的两个轴xBottom 和 yLeft的比例尺引擎。问题在于我为两个不同的轴使用了相同的比例尺引擎实例。当 qwtPlot 在程序结束或其析构函数中被销毁时它将尝试删除与其关联的资源。这意味着它可能会尝试删除同一个 scaleEngine 实例两次这会导致未定义的行为。 解决的方法也很简单 让两个坐标轴使用不同的比例尺引擎实例即可。 QwtLinearScaleEngine* scaleEngine1 new QwtLinearScaleEngine(); QwtLinearScaleEngine* scaleEngine2 new QwtLinearScaleEngine(); scaleEngine1-setAttribute(QwtScaleEngine::Floating); scaleEngine2-setAttribute(QwtScaleEngine::Floating); ui-qwtPlot-setAxisScaleEngine(QwtPlot::xBottom, scaleEngine1); ui-qwtPlot-setAxisScaleEngine(QwtPlot::yLeft, scaleEngine2);成功解决问题。 原因二使用fclose关闭一个“ nullptr” 文件指针 我在代码中定义了一个文件指针FILE* fp并且初始化为nullptr FILE* fp nullptr;在析构函数中我直接使用fclose(fp)来关闭了这个文件指针这样在退出程序时会产生异常 产生的原因是 在 C 标准库中尝试使用 fclose 关闭一个 nullptr 文件指针是未定义的行为。C标准文档并没有明确指定在这种情况下应该发生什么所以结果可能因编译器和平台而异。在某些实现中这样做可能不会有任何明显后果而在其他实现中它可能会导致运行时错误如上所示。这与 delete 在 C 中的行为不同。在 C 中尝试删除一个 nullptr 指针是明确定义为安全的无操作。但在 C 的 fclose 函数中这种行为没有明确定义所以应该避免。 解决方法 在关闭这个文件指针时先判断是否为空。 if (fp ! nullptr) {fclose(fp);fp nullptr; }完美解决。 为了写出健壮和可靠的代码开发者应尽量避免触发未定义的行为。这通常需要对编程语言的规范和相关的库有深入的了解以及使用各种工具如静态分析器、内存检查器如 Valgrind、fuzz 测试工具等来检测和避免潜在的问题。
http://www.hkea.cn/news/14371866/

相关文章:

  • 北京网站建设+知乎网站怎样做排名
  • 举例描述该如何布局网站关键词wordpress主题logo
  • 网站地址栏小图标石家庄网站制作报价
  • 哪个网站建设服务器是在国外的中国城乡与建设部网站
  • 我市精神文明建设的门户网站广州个人网站制作
  • 佛山企业网站seo云主机购买
  • 岳阳做网站推荐wordpress地图页面如何添加图片
  • 怎么创建网站快捷方式到桌面企业管理咨询论文
  • 怎么样做网站编程seo策略工具
  • 古镇建设网站怎么删除wordpress插件
  • 重庆seo网站收录优化dw asp access 网站开发优点
  • 中山建设网站官网软件产品设计方案
  • 海口手机端建站模板一个简单的html代码
  • 万州哪里有做网站的wordpress 添加编辑
  • 十大免费网站推广入口管理系统开发项目
  • 湖北网站制作公司的联系方式网站建设行业研究
  • 长沙定制网站wordpress影视解析插件
  • 如何制作有关西安的网站建设电子商务网站的方法有?
  • 网站系统繁忙哪里有免费网站可以看
  • 网站优化公司服务网站建设所需美工
  • 广州站在哪个区找人做网站价格
  • 建设银行广西分行网站电子商务毕业设计设计电商网站建设
  • 广州有专做网站logo图片素材大全
  • 济南 网站设计公司网站推广公司经理职责
  • 打车网站开发会做网站开发 但是不会二次开发
  • iis7建网站权重查询入口
  • 赣州城乡建设局网站招商网站建设全包
  • 如何防止网站挂马网站能不能一边用 一边备案
  • 电子商务网站建设主管的策划书网站建设 军报
  • 做网站买虚拟服务器yellow在线观看完整版视频