1. 现象
自定义的class Top内部有三个指针成员变量,如下:
/*top.h*/
class Top {
uint_64 *p_a;
uint_64 *p_b;
uint_64 *p_c;
...
...
}
在instance class Top生成对象*top的时候(执行到class Top构造函数的内部的时候)发现这三个指针是分配到了内存的,即能看到指针的值。
/*tb.cpp*/
include "top.h"
Tb::Tb() {
Top *top = new Top;
...
}
但是在后期使用这三个指针的时候,出现了segment fault。
gdb进去发现其中一个指针的值变为了0,即指向了非法的地址,另外两个指针的值也变了。但是该对象的地址(即this指针的值)并没有变。
2. debug过程
猜测可能的原因有两个:①头文件冲突,即你的系统中有两份同名但是内容不同的头文件。②栈溢出。
2.1 头文件冲突
我一开始是怀疑编译Tb.cpp时用的top.h 和实际使用的 *.so库中include的top.h不一致。即你系统中有两份同名但是内容不同的 top.h(为了方便叙述,我们把这两个同名但是内容不同的头文件分别称为top.h1和top.h2),如下:
/** top.h1 **/
class Top {
uint_64 *p_a;
uint_64 *p_b;