This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: C/C++ Option to Initialize Variables?


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]