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