Hi Christian, The fact that your system works with a static TString goes in the direction of my remark in my previous mail. I have the impression that in your function you store a pointer to the string (instead of storing a pointer to a copy of the string). When the TString goes out of scope your pointer becomes a dangling pointer and you get the typical segm. violation. I cannot tell you more without having a 20 lines program reproducing your problem, but I hope that my comment is sufficient for you to make further investigations. Rene On Sat, 20 Dec 2003, cstrato wrote: > Dear Rene > > Thank you for your fast reply as usual. > > This morning I had the idea to try: > static TString opt = "separate"; > and now everything works fine, and your answer gives me a > first explanation why I have to use static. > > However, I am far away to understand this issue, I checked > a couple of C++ books and did not find any explanation :-( > > As far as I understand you should usually avoid to declare > static variables in methods since they never go out of scope. > Since I have a lot of such cases I would need to declare > a lot of variables to be static. > > Do you think that this problem arises since I have defined: > static XNormationManager * sNormManager; > i.e. would this problem still exist if I simply declare: > XNormationManager * fNormManager; > > Best regards > Christian > > > Rene Brun wrote: > > Hi Christian, > > > > It looks like you are just hitting a simple C++ scoping problem. > > In case you store a pointer to the second argument of your > > InitSelector function, this pointer will point to a dead area when > > the original TString object will go out of scope. > > > > Rene Brun > > > > On Sat, > > 20 > > Dec 2003, cstrato wrote: > > > > > >>Dear Rooters > >> > >>Meanwhile, I could narrow down the error to the following > >>method in my GUI class XNormationFrame: > >>Int_t XNormationFrame::InitSelector() > >>{ > >> Int_t err = 0; > >> TString opt = "separate"; > >> err = XMainFrame::sNormManager->InitSelector("rank", opt.Data()); > >> return err; > >>} > >>In this case I get the error described earlier. > >> > >>However, the following simple change DOES work: > >>Int_t XNormationFrame::InitSelector() > >>{ > >> Int_t err = 0; > >> err = XMainFrame::sNormManager->InitSelector("rank", "separate"); > >> return err; > >>} > >> > >>Can anybody explain me what could cause this error??? > >> > >>Thank you in advance > >>Best regards > >>Christian > >> > >> > >>cstrato wrote: > >> > >> > >>>Dear Rooters > >>> > >>>I have the following strange problem and do not know how > >>>to find the error: > >>> > >>>I have a basic library and a couple of derived libraries, > >>>which define different XManager classes and subclasses. > >>>Using one of the derived libraries I am able to execute > >>>the following macro from within ROOT: > >>> > >>>void Normalize( > >>>{ > >>> XNormationManager *manager = new XNormationManager("Manager"); > >>> > >>> manager->Initialize("PixType"); > >>> manager->InitSelector("rank", "separate", 4,0,0.3,400,0); > >>>// here I initialize XSelector::fOption = "separate" > >>> > >>> manager->New("test","~/ROOT/rootcode","PixType"); > >>>// here I create file = new TFile(name,"CREATE", title) > >>> > >>> manager->OpenData("~/ROOT/rootdata/test.root"); > >>> > >>> manager->Select("TestSet","tree1"); > >>>// at this point XSelector::fOption is already set to: > >>>// fOption = "CREATE" instead of fOption = "separate" > >>>// when this code is part of a standalone GUI app! > >>> > >>> manager->Select("TestSet","tree2"); > >>> manager->Select("TestSet","tree3"); > >>> > >>> manager->Normalize("TestSet"); > >>> > >>> delete manager; > >>>} > >>> > >>>Please note that this macro has always worked witout any > >>>problems and still runs perfectly fine. > >>> > >>>However, now I have developed a GUI application, where > >>>the user can set all parameters graphically, and where > >>>this code is implemented within different methods of > >>>my class XNormationFrame. In the XMainFrame I have defined: > >>> static XNormationManager *sNormManager; > >>>and the subframe calls e.g. > >>> XMainFrame::sNormManager->Initialize("PixType") > >>>etc. > >>> > >>>When I press the button to execute the same commands > >>>as in my macro, then XSelector::fOption, which is > >>>set to "separate" in InitSelector(), is strangley > >>>set to "CREATE" after execution of manager->New()!! > >>> > >>>I know that you cannot give me a concrete answer, but > >>>maybe you could tell me: > >>>Does this look like a buffer overflow? > >>>What are the usual errors which result in such an error? > >>>What can be done to track down this error? > >>> > >>>Thank you in advance > >>>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 : Thu Jan 01 2004 - 17:50:17 MET