今天遇到了一个由Qt::WA_DeleteOnClose造成的野指针问题,在网上搜到的一个求助贴如下(http://bbs.csdn.net/topics/380182058): 主窗口类QMainWindow的头文件里定义了一个QDialog类的指针:QDialog *dialog;现有如下函数语句: if(dialog==null) { dialog=new Dialog(this); dialog->setAttribute(QT::WA_DeleteOnClose,true); } di…
[1]源码 工作中,时常会遇到各种各样的异常场景,有些异常场景很常见,必要备录,以防再犯. 分享本案例为:QT创建窗体时parent父窗体传野指针引起异常. 本案例源码如下: 1.1 默认新建一个QT工程(ps:本地QT版本为5.3) (1)工程目录结构 (2)工程pro文件 QT += core gui greaterThan(QT_MAJOR_VERSION, ): QT += widgets TARGET = CustomComboBox TEMPLATE = app SOURCES +=…
例: connect(&objec1,&class::slot_func1,&object2,&class::slot_func2) 如果 &objec   传输入的是一个野指针,程错误因常不易发现,  在运行时会 无端崩溃.…
一.简介 Qt内存管理机制:Qt 在内部能够维护对象的层次结构.对于可视元素,这种层次结构就是子组件与父组件的关系:对于非可视元素,则是一个对象与另一个对象的从属关系.在 Qt 中,在 Qt 中,删除父对象会将其子对象一起删除. C++中delete 和 new 必须配对使用(一 一对应):delete少了,则内存泄露,多了麻烦更大.Qt中使用了new却很少delete,因为QObject的类及其继承的类,设置了parent(也可在构造时使用setParent函数或parent的addChild…
最近在学习QT,自己仿写了一个简单的QT绘图程序,但是在退出时总是报错,断言错误: 报错主要问题在_BLOCK_TYPE_IS_VALID(pHead->nBlockUse),是在关闭窗口时报的错: 先前考虑是析构函数有问题,重写并且排查相关变量并未发现问题. 根据报错问题又推测栈调用出现内存溢出,寻找程序中所有的链表和栈调用.未果. 最后用了最笨的方法,将构造函数中所有变量挨个遍历,最终确定问题出在Qt的setAttribute(Qt::WA_DeleteOnClose)这行代码上. 网上查询…
QPointer 如何翻译呢?我不太清楚,保留英文吧. The QPointer class is a template class that provides guarded pointers   to QObjects. 使用:一个guarded指针,QPointer<T> ,行为和常规的指针 T * 类似 特点:当其指向的对象(T必须是QObject及其派生类)被销毁时,它会被自动置NULL. 注意:它本身析构时不会自动销毁所guarded的对象 用途:当你需要保存其他人所拥有的QObj…
1. 故障描述 故障操作步骤: 单板上插了一个U盘,出问题前正在通过FTP往单板上拷贝文件,拷贝的过程中单板自动重启. 故障现象: Entering kdb (current=0xc000000594069e38, pid 4) on processor 0 Oops: <NULL> due to oops @ 0xffffffffc08d3d84 [0]more> [0]kdb> 2. 信息采集 [0]kdb> bt Stack traceback for pid 4 0x…
尽管在ARC中,野指针出现的频率已经大大降低了,但是仍然会有野指针困扰着我们. 在模拟器调试中,我们可以开启scribble或者zombieObject来将已经释放的内存填充无意义的内容,能够将一些非必现的野指针变成必现.但是,这只能在模拟器中,但是给测试的包并不能这么做.测试是非常需要这个功能的. 为了给测试支持上这个功能,那么我们不得不自己来实现这个功能. 我首先介绍下我用到的库,来自于Facebook的fishhook 下载地址https://github.com/facebook/fis…
写出本文仅仅是处于备忘的目的. 最近为现在做的软件添加了一个内存回收机制(以前处于某种内存只申请不释放,这并不等于内存泄露,因为我们知道这些内存块在内存中的位置)-- 在某一块内存不使用的时候将其释放掉,以防止内存缓慢增长. 由于以前没有释放内存,所以就不存在野指针的问题.于是乎肯定坑爹的事情就从内存释放开始了 ... /大哭 只从添加了内存释放机制之后软件就出现了各种崩溃 ... 好了,闲话少说,直奔主题. 一个内存块很多地方引用,一旦一个地方释放内存,而且其他地方还在引用,那后果就 ...…
今天,在工作群中,被问到了内存泄漏和野指针指向的区别,自己答的不是很好,特意回来查了资料,在博文中总结一下经验,欢迎指正. 内存泄漏:是指在堆区,alloc 或new 创建了一个对象,但是并没有放到自动释放池中,或者没有free 对象,导致这块内存一直被占用,换一种方法说,就是没有指针指向这块内存,再通俗点,开辟了一段空间,在没有被释放之前,结果找不到这块内存了,这样就会造成内存泄漏的问题.这块内存会直至程序运行结束才会被释放. 野指针:是指针指向已经delete 的对象,或者是未申请访问的受限…