C++ class在执行到构造函数内部的时候 segment fault

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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值