调试死机问题时可根据死机地址快速判断问题出在栈区还是堆区

先看一段会造成死机的代码及其运行结果:

#include <iostream>
using std::cout;
using std::endl;
using std::ostream;

class Tree {
  int height;
public:
  Tree(int treeHeight) : height(treeHeight) {
    cout << __func__ << "(), this = " << this << endl;
  }
  ~Tree() { cout << "~Tree()\n"; }
#if 0 
  friend ostream&
  operator<<(ostream& os, const Tree* t) {
    return os << "Tree height is: "
              << t->height << endl;
  }
#else
  friend ostream&
  operator<<(ostream& os, const Tree& t) {
    return os << "Tree height is: "
              << t.height << endl;
  }
#endif
}; 

int main() {
  cout << "create an object address in stack\n";
  Tree obj(10);

  cout << "create an object address in heap\n";
  Tree* t = new Tree(40);
  delete t;
  //t = nullptr;
  delete t;
}

运行结果:

[email protected]:~/project/test/cpp/new_del$ ./a.out

create an object address in stack

Tree(), this = 0x7fffdbe5b850

create an object address in heap

Tree(), this = 0x18ab010

~Tree()

~Tree()

*** Error in `./a.out‘: double free or corruption (fasttop): 0x00000000018ab010 ***

Aborted (core dumped)

分析:栈空间的对象地址为0x7fffdbe5b850。堆空间的对象地址为0x18ab010。测试环境为64位虚拟机。栈地址的高4字节地址不为0,堆地址的高4字节通常为0。

时间: 2024-09-30 14:03:00

调试死机问题时可根据死机地址快速判断问题出在栈区还是堆区的相关文章

在使用Windows时防止电脑死机的技巧

一般情况下,我们新建某个快捷方式时,总会在图标左下角出现一个小箭头,很不美观,下面是去除这个小箭头的方法: 首先,单击"开始"按钮,选择"运行",在运行对话框中输入regedit命令后回车,即可进入注册表编辑器,选择HKEY_CLASSES_ROOT/lnkfile,在右边的窗口中找到字符串值"isshortcut",按DELETE键将其删除.然后,仍在HKEY_CLASSES_ROOT / 下找到piffile,同样在其右边窗口中将字符串值&q

真机测试时个别机型无法显示toast的问题解决方案

真机测试时个别机型toast信息不显示,找到两个解决方案,不知还有什么其它有效方法,期待大神们的分享!!! 1.手动方案:设置-->应用软件管理-->对应APP-->勾选显示通知框 2.替代方案:避免toast被拦截,可以考虑用alert dialog来显示需要的信息 public static void forceUpdate() { Log.i(TAG, "forceUpdate"); // UmengUpdateAgent.forceUpdate(mActivi

Xcode5.1 64位添加第三方库真机测试时出现 Apple Mach -O Linker Error

今天添加微信分享的时候添加微信的静态文件和我以前添加的Core-Plot第三方库发生了冲突, 出现一大堆的 "Apple  Mach  -O Linker Error" , 错误分析: 这次出现错误的原因是 Architectures不统一造成的,微信的APi要求用32位编译,而第三方库是包含了64位. 解决方法: 解决的原理很简单 ,就是把Architectures 统一,把项目的Architectures和所引用的第三反库的(如果还有pod进来的pod内的targets的内容也要修

WinCE 调试某手写输入法时遇到的加载手写库失败的问题

调试某手写输入法时遇到的加载手写库失败的问题 在 WinCE6.0 下使用此手写输入法 SDK 做了一个单独的手写输入程序A(MFC Dialog 框架).正常情况下,可以正常使用. 此 A 程序,采用 LIB 方式加载此的手写 SDK. 在运行某一带手写输入的程序 B 后,A 程序无法运行.首先怀疑 B 程序中也使用了此手写 SDK,导致加载冲突. 但仔细想想程序 B 和程序 A 应该运行在不同的进程空间,且最后确定程序 B 并未使用此手写. 进一步测试发现,如果程序 A 先运行,再程序 B 

真机测试时出现 could not find developer disk image问题

解决Xcode在ipad/iphone 系统真机测试时出现could not find developer disk image问题 原因:手机系统版本比xcode版本高,sdk不支持 方法:更新Xcode版本.

单?片?机?定?时?器?初?值?实例计?算?

一.10MS定时器初值的计算:  1.晶振12M  12MHz除12为1MHz,也就是说一秒=1000000次机器周期.10ms=10000次 机器周期.  65536-10000=55536(d8f0)  TH0=0xd8,TL0=0xf0  2.晶振11.0592M  11.0592MHz除12为921600Hz,就是一秒921600次机器周期,10ms=9216次机器周期.  65536-9216=56320(dc00)  TH0=0xdc,TL0=0x00 二.50MS定时器初值的计算:

应试教育的死穴,恰在于堵死了孩子“犯错”的空间

今天周日,闲着没事,来公司梳理一下最近的项目心得,又翻起了前段时间看到的文章<应试教育的死穴,恰在于堵死了孩子"犯错"的空间>,来浅谈一下自己的感受吧! 还是从自身谈起,小时候手笨,脑子不是很灵活,于是会出现各种的问题,这时候老师就开始发火.生气,轻则骂几句,重则棍棒伺候.于是在这种环境下,总是害怕犯错事,害怕犯错误. 还有一种情景,就是所谓的考试了,尤其是语文考试,相比大家都经历过,对于一篇阅读理解的分析,每个人都有自己的见解,写写自己的心理体会不就得了,可总是会有一种所

【转】WinDbg调试器:启动程序时自动连接调试器方法

当我们调试服务进程或子进程时,无法直接用调试加载进程的方式启动,此时需要在启动程序时自动连接调试器方法: 第一步:注册表展开到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options路径下: 第二步:在Image File Execution Options上鼠标右键,新建"项",项名为你要调试的程序,比如 test.exe: 第三步:在项名上,右键,新建字符

使用真机测试时,在eclipse中data文件夹打不开

我们知道,在真机测试的时候,在某个应用程序中产生的db文件存在于data/data/应用的包名/中,这是我们很可能需要去该文件夹去查看一下,但是这个文件夹很可能打不开.以下给出解决办法: 1)使用RE文件管理器把data文件夹的权限更改为可读写,问题就解决了 2)使用模拟器 使用真机测试时,在eclipse中data文件夹打不开