C/C++ Option to Initialize Variables?

Michael Veksler mveksler@tx.technion.ac.il
Mon Feb 18 12:42:00 GMT 2013


On 02/18/2013 02:02 PM, Alec Teal wrote:
> On 18/02/13 11:40, Jeffrey Walton wrote:
>> Hi All,
>>
>> http://gcc.gnu.org/onlinedocs/gcc/C-Dialect-Options.html#C-Dialect-Options 
>>
>>
>> Is there an option to initialize variables to known values in a C/C++ 
>> program?
>>
>> My use case is 'debug' builds and finding use of uninitialized values
>> that get lucky by being 0 most of the time. For example:
>>
>> void DoSomeithWithFoo(FOO** ppf) {
>>    if(ppf && *ppf == NULL) {
>>      *ppf = new FOO;
>>      ...
>>    }
>> }
>>
>> FOO* p;
>> DoSomeithWithFoo(&p);
>>
>> So I would like something that initializes to known, but non-NULL,
>> such as 0xCDCDCDCD or 0xFDFDFDFD (similar to Visual Studio behavior).
>>
>> Jeff
>>
> Probably not, put =0, if I say "int x;" I am just saying there is an 
> int, it's name is x, deal with it. I may assign to it later, sticking 
> =0 at the end implicitly wouldn't be good for anything really.
> However! calloc initializes the memory to zero change malloc(size to 
> calloc(1,size and you're done.
>
> Does that help?
>
> Alec
>
>
I believe Jeff thinks the above is a bug in *his* code, and he wants a 
flag to
help him spot it. By assigning non-NULL values to unintialized variables 
will,
supposedly, make the code behave wrongly, making it easier to detect.

I agree that having gcc deliberately put garbage into uninitialized 
variables can
be very helpful in shortening the compile-test-debug-fix loop. I run 
valgrind only
occasionally, even though I run unit-tests after every modification. 
This means
that bugs due to unintialized memory are sometimes detected many days after
they were first introduced, which makes it more difficult to understand the
bug. Testing code compiled with this flag will probably result in less 
bugs of
this kind left to  testing by valgrind.

I see the main issue with such flags in their interaction with tools like
valgrind. Such a flag could defeat valgrind's algorithm for detecting
unintialized local variables, unless it is made aware of the flag
(which I don't see how it could be done, without special hints from gcc).

Michael



More information about the Gcc mailing list