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