[ROOT] Deletion problems.

From: Jens Ivar Jordre (jens@fi.uib.no)
Date: Wed Apr 05 2000 - 14:41:09 MEST


Hello rooters of the world.

A problem with deletion has arisen when trying to delete instances of a
class I made. 

---------------

My header file:

class TFileData : public TObject {
 private: 
  Bool_t fAvsFound, fSigsFound;
  const Int_t fMaxPads;
  Int_t fAnode, fField;
  Char_t fFileName[50];
  TArrayI fNoClusters;
  TArrayF fChargeAvs, fChargeSigs, fPeakAvs, fPeakSigs;
  TObjArray fClusters;
  virtual void SetMaxPads(const Int_t pads) {}
  virtual void Init(const Int_t n);

 public:
  TFileData();
  TFileData(const Int_t pads, const Char_t* name, const Int_t anode = 0, const Int_t field = 0);
  virtual void ~TFileData() {}
....
};

Member functions:

#include "TFileData.h"

TFileData::TFileData() : fMaxPads(40) {
  strcpy(fFileName,"NN");
  fAnode = 0;
  fField = 0;
  Init(fMaxPads);
}

TFileData::TFileData(const Int_t pads, const Char_t* name, const Int_t anode, const Int_t field)
  : fMaxPads(pads) {

  strcpy(fFileName,name);
  fAnode = anode;
  fField = field;
  Init(fMaxPads);
}

virtual void TFileData::Init(const Int_t n) {
  //
  //Initialize members.
  //
  fNoClusters.Set(n+1);
  fChargeAvs.Set(n+1);
  fChargeSigs.Set(n+1);
  fPeakAvs.Set(n+1);
  fPeakSigs.Set(n+1);
  fAvsFound = kFALSE;
  fSigsFound = kFALSE;
}

....

----------------

I don not precomile it, only load it as is with
gROOT.LoadMacro("TFileData.C");

Making an instance is no problem:
root [0] fd = new TFileData(30,"file1",1200,300)
(class TFileData*)0x8888b48 

My problem is that I don't manage to delete it:
root [1] delete fd

 *** Break *** segmentation violation
Root > Function ~TFileData() busy flag cleared
 
I'm using v. 2.23/12 on RH6.1

I also enclose a very similar class which I use in the same
way. Instances of this one are easily deleted.

-----------
Header:

class TVoltData : public TObject {
 private: 
  Bool_t fAvsFound, fSigsFound;
  const Int_t fMaxPads;
  Int_t fVolt;
  TArrayI fNoClusters;
  TArrayF fChargeAvs, fChargeSigs, fPeakAvs, fPeakSigs;
  TObjArray fClusters;
  virtual void SetMaxPads(const Int_t pads) {}
  virtual void Init(const Int_t n);

 public:
  TVoltData();
  TVoltData(const Int_t pads, const Int_t volt);
  virtual void ~TVoltData() {}
....
};

Member functions:

#include "TVoltData.h"

TVoltData::TVoltData() : fMaxPads(40), fVolt(1000) {
  Init(fMaxPads);
}

TVoltData::TVoltData(const Int_t pads, const Int_t volt) : fMaxPads(pads), fVolt(volt) {
  Init(fMaxPads);
}

virtual void TVoltData::Init(const Int_t n) {
  //
  //Initialize members.
  //
  fNoClusters.Set(n+1);
  fChargeAvs.Set(n+1);
  fChargeSigs.Set(n+1);
  fPeakAvs.Set(n+1);
  fPeakSigs.Set(n+1);
  fAvsFound = kFALSE;
  fSigsFound = kFALSE;
}

....

--------------


--------------------------------------------------------------
Jens Ivar Jřrdre, masterstud. in Experimental Nuclear Physics
Addr.: Dep. of Phys., UiB, Allégt. 55, N-5007 BERGEN, NORWAY
E-mail: JensIvar.Jordre@fi.uib.no, Phone office: (+47)55582734
Web: http://www.fi.uib.no/~jens

"Time's fun when you're having flies."
-- Kermit the Frog



This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:22 MET