Re: [ROOT] compiler warning

From: Victor Perevoztchikov (perev@bnl.gov)
Date: Mon Jun 07 2004 - 17:55:33 MEST


In addition to Valery, construction
> >     char option[csize];
allowed only in gcc.

Victor

Victor M. Perevoztchikov   perev@bnl.gov
Brookhaven National Laboratory MS 510A PO Box 5000 Upton NY 11973-5000
tel office : 631-344-7894; fax 631-344-4206;

----- Original Message ----- 
From: "Valeri Fine" <fine@bnl.gov>
To: "'cstrato'" <cstrato@aon.at>; "'Elias Athanasopoulos'"
<elathan@phys.uoa.gr>
Cc: <roottalk@pcroot.cern.ch>
Sent: Sunday, June 06, 2004 5:47 PM
Subject: RE: [ROOT] compiler warning


> >
> > Dear Elias, dear Valeri
> >
> > Thank you for your explanation.
> > I have now solved the problem by using:
> >     Int_t csize = strlen(opt) + 1;
> >     char option[csize];
> >
> [Valeri Fine]
>  Let me call your attention that your solution is still error prone
>
>  You allocated the needed space on stack.
>  This means the space will be automatically de-allocated and (it can be
> allocated for other purpose) as soon as your code leaves the "option"
> variable scope. Because you did not provide your source I have no clue
> what this scope is. May be it is what you wanted . . .
>
> > I hope that this does not only work with gcc but also with
> > other compilers.
> [Valeri Fine]
> I hope thee smart compiler will warn as soon as you try using this
> variable out of scope, however the smart guy always can defeat any
> compiler :-)
>
> Hope this helps.
>
> >
> > Best regards
> > Christian
> >
> >
> > Valeri Fine wrote:
> >
> > > Hello Christian
> > >
> > >
> > >
> > >>Dear Rooters
> > >>
> > >>I apologize for a simple non-root question, but sorrowly I have
> > >>nobody else to ask:
> > >>Sometimes I have statements such as the following:
> > >>    if (strcmp(name, "option") == 0) {
> > >>       char *option;
> > >>       option = strcpy(option, opt);
> > >>    }
> > >>
> > >>Although it is correct, I get the following compiler warning:
> > >>"warning: `char*option' might be used uninitialized in this
> function"
> > >
> > >
> > > [Valeri Fine] It looks like the compiler pointed you to your bug to
> be
> > > fixed. That must lead to the memory corruption. "strcpy"  alone
> > > allocates NO extra memory.
> > >
> > >
> > >
> > >>How can I prevent such compiler warnings?
> > >
> > > [Valeri Fine]
> > >
> > >>Would it be save to write:
> > >>       char *option = "";
> > >>(If this is not save, why?)
> > >
> > > [Valeri Fine]
> > > Not it is NOT safe !!!
> > >
> > > To avoid the memory corruption you need
> > >
> > >   char *option = new char[strlen(opt)+1];
> > >
> > >  or something like this to make sure the memory the POINTER "option"
> > > points to is allocated and it is enough to accommodate the entire
> string
> > > pointed by "opt" pointer.
> > >
> > >   Hope this helps.
> > >
> > >    Valeri
> > >
> > >>Thank you in advance
> > >>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
> > >>-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
> > >
> > >
> > >
> > >
>



This archive was generated by hypermail 2b29 : Sun Jan 02 2005 - 05:50:08 MET