Re: RT stop in TTree->Branch [WinNT)

From: Nick van Eijndhoven (Nick@phys.uu.nl)
Date: Thu Oct 28 1999 - 09:57:04 MEST


Dear Mariusz,
It seems that you hit the same problem as I did with
one of my simple test cases.
You probably won't have this crash using ROOT 2.22/10
(at least in my case 2.22/10 was o.k.).
Could you check this ?
After some thorough investigation it seems that Valeri
Faine found the problem to be in the DLL (and LIB ?) building
for the ROOT libs for windows.
Valeri gave me some new libs which I will test out; if
they work I think the problem is fixed.

                                            Cheers,
                                             Nick.

Mariusz Stanczak wrote:
> 
> The program below used to be a C program that used char[] and which I
> decided to convert to using string(s) and fstream(s).  The program logic
> remained unchanged but now the program stops on a third trip through the
> main while loop (on a line marked with arrow) with the error text included
> below and exit code 3.  This is with 2.23.6 on WinNT.
> Thanks for any pointers,
> 
> /Mariusz
> 
> ---- error text -----
> CustomReAlloc2: oldsize != size
> Fatal in <CustomReAlloc2>: storage area overwritten
> aborting
> Warning in <TWinNTSystem::StackTrace>: this method must be overridden!
> ---- error text end -----
> 
> ----- code -----
> #include <time.h>
> #include <stdlib.h>
> #include <stdio.h>
> #include <string>
> #include <fstream>
> #include <iostream>
> 
> #include "TFile.h"
> #include "TTree.h"
> #include "TBenchmark.h"
> #include "TROOT.h"
> 
> using namespace std;
> 
> int main() {
>         TROOT root("rif", "ROOT Interface");
>         TBenchmark *gBenchmark = new TBenchmark();
>         TFile *f_root;
>         TTree *tree;
>         char *e = 0;
>         string f_path = "";
>         const char *f_name = "usall.prn";
> 
>         e = getenv("DATA_PATH");
>         if (e)
>                 f_path = string(e) + f_name;
>         else
>                 f_path = f_name;
> 
>         ifstream f_in(f_path.c_str());
>         if (!f_in) {
>                 cerr << "Cannot open in " << f_path << endl;
>                 return 1;
>         }
> 
>         string s = "";
>         string prev_s = "";
>         string date = "";
>         string temp_s = "";
>         string fname = "";
>         int sequence = 0;
>         char stmp[6] = "";
>         struct tm t;
>         struct {
>                 Int_t time;
>                 Float_t fo;
>                 Float_t fh;
>                 Float_t fl;
>                 Float_t fc;
>                 UInt_t iv;
>         } data ;
>         data.fo = 0.0;  // force floating point
> 
>         //read a line
>         while (!f_in.eof()) {
>                 f_in >> s >> date >> data.fo >> data.fh
>                         >> data.fl >> data.fc >> data.iv;
> 
>                 if (s == "")
>                         continue;
> 
>                 if (s != prev_s) {
>                         if (prev_s != "") {
>                                 f_root->Write();
>                                 f_root->Close();
>                                 cout << "File " << fname;
>                                 gBenchmark->Show(prev_s.c_str());
>                                 gBenchmark->Reset();
>                         }
>                         prev_s = s;
>                         gBenchmark->Start(s.c_str());
> 
>                         sequence += 1;
>                         sprintf(stmp, "%05.5i", sequence);
>                         fname = string("F") + stmp + ".data";
> 
>                         temp_s = s + " price file";
>                         // these two leak... OK for now (f_root->Open() does not work!)
>                         f_root = new TFile(fname.c_str(), "RECREATE", temp_s.c_str());
>                         tree = new TTree(s.c_str(), "");
>                 }
>                 sscanf(date.c_str(), "%4d%2d%2d", &t.tm_year, &t.tm_mon,
> &t.tm_mday);
>                 t.tm_year -= 1900;
>                 t.tm_mon -= 1;
>                 t.tm_sec = t.tm_min = t.tm_hour = 0;
>                 data.time = (Int_t)mktime(&t);
> 
>                 if (data.time == -1) continue;
> 
>                 tree->Branch(date.c_str(), &data,
>                                 "time/i:fo/F:fh/F:fl/F:fc/F:iv/i");             <=== blows up here
>                 tree->Fill();
>         }
>         f_root->Write();
>         return 0;
> }
> ----- code end -----




This archive was generated by hypermail 2b29 : Tue Jan 04 2000 - 00:43:41 MET