[ROOT] Problem with TString in while-loop

From: cstrato (cstrato@aon.at)
Date: Tue Dec 17 2002 - 21:52:37 MET


Dear Rooters

The following code fragment works fine when compiled,
but causes CINT to give a ***Break *** bus error:

//-------------------------
    char nextline[4096];
    input.getline(nextline, 4096, delim);

    TString str = "";
    char *tmpname = new char[strlen(nextline) + 1];
    char *delname = tmpname;
    tmpname = strtok(strcpy(tmpname,nextline),sep);
    while(tmpname) {
       if (strstr(tmpname,var) != 0) {
          str = SubString(tmpname, '(',')');  //<====causes error
//         TString str = SubString(tmpname, '(',')');  //<===no error!!
//         str = tmpname;   //<===no error
          cout << "str= " << str << endl;
       }//if
       tmpname = strtok(NULL, sep);   //<======malloc error in 1. case
       if (tmpname == 0) break;
    }//while
    delete [] delname;

//-------------------------
TString SubString(const char *name, char sep1, char sep2)
{
    // Extract substring between first sep1 and last sep2

    TString outname = TString(name);

    Int_t first = outname.First(sep1) + 1;
    Int_t last  = outname.Last(sep2);
    Int_t len   = last - first;

    outname = &outname[first];
    if (last > 0) outname.Resize(len);

    return outname;
}//SubString
//------------------------

While the compiled code works fine, in CINT I get the following error:
*** malloc[416]: Deallocation of a pointer not malloced: 0x1b2d565;
This could be a double free(), or free() called with the middle of
an allocated block; Try setting environment variable MallocHelp to
see tools to help debug

However, when "str" is initialized within the while() loop
as "TString str", or when I write "str = tmpname" (see code fragment),
CINT is able to run the code without problems.

Could there be something wrong with my code?
Could this be a general problem of CINT not being able to handle
the case of an "if" statement  within a "while()" loop, or could
this be a problem on MacOS X only?
(I am running root 3.04/01 on MacOS X 1.1.2)

Thank you in advance for your help.

Best regards
Christian
_._._._._._._._._._._._._._._._
C.h.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
_._._._._._._._._._._._._._._._



This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:51:24 MET