Re: [ROOT] compiler warning

From: cstrato (cstrato@aon.at)
Date: Mon Jun 07 2004 - 21:02:01 MEST


Dear all

Thank you all for giving me some more information.

Sorrowly, Victor´s statement is really bad news.
Is the following code allowed in other compilers:
    const Int_t kBufSize = 512; //in global space
    char option[kBufSize];  // in different functions

To reply to Valeri:
Suppose, I have the following code with the input:
    "options = "myopt1:myopt2"

    MyFunction(const char *option)
    {
       Int_t csize = strlen(options) + 1;
       char *opt  = new char[csize];
       char *opt1 = new char[csize];
       char *opt2 = new char[csize];

       opt = strtok(strcpy(opt, options),":");
       opt1 = strcpy(opt1, opt);

       opt = strtok(NULL, ":");
       opt2 = strcpy(opt2, opt);

       myClass->MyMethod(opt1, opt2)
       {
          fString1 = opt1;   //TString fString1;
          fString2 = opt2;   //TString fString2;
       }

       delete [] opt2;
       delete [] opt1;
       delete [] opt;
    }
Is this code safe as long as I use TString and not char?

BTW, this is the reason, why I always hated C which I
have never used, and why I try to use the TString class
whenever possible, :-)

Best regards
Christian


Victor Perevoztchikov wrote:

> 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