ROOT类初始化后成员指针变成野指针的问题

ROOT类初始化后成员指针变成野指针的问题

现在对面向对象和面向过程理解的不够透彻,只是希望用面向对象的形式写出一个类,把一套计算工作写成一个类似与工具包的样子。写出一个简易的雏形,大概构造是这样的:

class A: public TObject
{
private:
	TH1D* a;
	TH2D* b;
	TH3D* data;
public:
	A();
	~A();

	void APlus();
	... ...
};

成员对象a和b对应要求的两套直方图,在构造函数A()中,从.root文件中读取数据写入data指向的内存,然后通过data来计算ab的BinContent。
在构造函数中应用了这样的语句:

A::A()
{
	TFile fdata("xxx.root");
	fdata.GetObject("xxx",data);
	
	... ...
}

将.root文件读取到fdata中,再将其中的对象写入data对应的内存。这样的一个类在实例化时就会出现问题:

root[0]: A* a = new A();
root[1]: a.APlus();
*** Break *** segmentation violation
... ...
... ...

这看起来是调用APlus()时,引用了野指针。但是在构造函数中,已经完成了对所有成员指针的初始化,甚至可以直接用Draw()方法将a,b两个对象的直方图画出来,也就是说,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值