Dear Rene
Thank you for this confirmation.
My problem was, that from within this function I have called another
function,
where I have also created an array of strings, and this caused root to
crash.
Meanwhile, I have re-written the second function, but I for this reason
I thought,
I will ask, if there may be a hidden problem in my code.
Bes regards
Christian
Rene Brun wrote:
>Hi Christian,
>
>Your logic seems OK. What is the problem?
>
>Rene Brun
>
>On Wed, 12 Jun 2002, cstrato wrote:
>
>>Dear Rooters
>>
>>Suppose, I have a table containing first name, last name and comment
>>fields,
>>which I would like to store in a TTree, using a class TPerson.
>>This is straight foreward, however, for certain purposes I need to read
>>into
>>memory the complete table first (e.g. in order to sort the table
>>alphabetically
>>using a hash table).
>>For this reason I have to create temporary arrays of TString.
>>
>>The macro shown below seems to work until now, however, I am wondering if
>>I do the initialization of the arrays of TStrings correctly, or if there
>>is a better way?
>>The problem is that the names in the table do not have the same length,
>>especially, the comment field can vary from few characters to more than 1000
>>characters. With more than 100,000 records to import, this could cause
>>hidden
>>memory problems.
>>
>>I know this is not necessarily a question for roottalk, nevertheless, it
>>would be great if someone could give me an advice.
>>
>>Thank you in advance for your help.
>>
>>Best regards
>>Christian
>>-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
>>C.h.r.i.s.t.i.a.n. .S.t.r.a.t.o.w.a
>>V.i.e.n.n.a. .A.u.s.t.r.i.a
>>-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
>>
>>//______________________________________________________________________________
>>class TPerson: public TNamed {
>> private:
>> TString fFirstName;
>> TString fLastName;
>> TString fComment;
>> public :
>> TPerson();
>> TPerson(const char *name,const char *title);
>> virtual ~TPerson();
>>}
>>
>>//______________________________________________________________________________
>>Int_t XGeneChip::ReadNames(ifstream &input)
>>{
>> char nextline[4096];
>> Int_t i;
>> Int_t err = 0;
>>
>>// Create local arrays to store data from input
>> TString *arrFirst = 0;
>> TString *arrLast = 0;
>> TString *arrComm = 0;
>>
>> // initialize memory for local arrays
>> Int_t size = 100000;
>> if (!(arrFirst = new TString[size])) {err = -3;}
>> if (!(arrLast = new TString[size])) {err = -3;}
>> if (!(arrComm = new TString[size])) {err = -3;}
>>
>> if (err == 0) {
>> // Initialize local arrays
>> for (i=0; i<size; i++) {
>> arrFirst[i] = "NA";
>> arrLast[i] = "NA";
>> arrComm[i] = "NA";
>> }//for_i
>>
>> // Read data
>> TString first, last, comm;
>> for (i=0; i<size; i++) {
>> input.getline(nextline, 4096)
>> if (input.fail()) break;
>> // read fields
>>// input >> first >> last >> comm; //does not work!!!
>> first = strtok(&nextline[0], "\t");
>> last = strtok(NULL, "\t");
>> comm = strtok(NULL, "\t");
>> arrFirst[idx] = first;
>> arrLast[idx] = last;
>> arrComm[idx] = comm;
>> }//for_i
>>
>> // Do something with the data in memory
>> // e.g. sort data alphabetically
>>
>> // Init tree
>> tree = etc;
>> TPerson *name = 0;
>> etc
>>
>> // Fill tree
>> for (i=0; i<size; i++) {
>> idx = index[i];
>> name->SetFirst(arrFirst[idx]);
>> name->SetLast(arrLast[idx]);
>> name->SetComment(Comm[idx]);
>> tree->Fill();
>> }//for_i
>>
>> // Write tree to file
>> tree->Write("", TObject::kOverwrite);
>> tree->Delete("");
>> tree = 0;
>>
>> SafeDelete(name);
>> }//if
>>
>>// Clean up
>> if (arrFirst) {delete [] arrFirst; arrFirst = 0;}
>> if (arrLast) {delete [] arrLast; arrLast = 0;}
>> if (arrComm) {delete [] arrComm; arrComm = 0;}
>>
>> return err;
>>}//ReadNames
>>
>>
>>
>>
>
>
This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:50:56 MET