[Bug libstdc++/67434] std::chrono::duration acts like static even if instantiated every time
sthlm58 at gmail dot com
gcc-bugzilla@gcc.gnu.org
Thu Sep 3 11:55:00 GMT 2015
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67434
--- Comment #2 from sthlm58 at gmail dot com ---
(In reply to Jonathan Wakely from comment #1)
> (In reply to Michal Kucharski from comment #0)
> > std::chrono::duration<double> benchmark( )
> > {
> > std::random_device rd;
> >
> > std::chrono::duration<double> total;
>
> You have not initialized this variable.
>
> >
> > for (int i = 0; i < 100; i++)
> > {
> > auto t1 = std::chrono::high_resolution_clock::now();
> > auto t2 = std::chrono::high_resolution_clock::now();
> > total += std::chrono::duration_cast<std::chrono::duration<double>>(t2 -
> > t1);
>
> This has undefined behaviour because you are performing addition on an
> uninitialized value. You could have found this with valgrind.
In other words, here 'total' was default-initialized (hence unspecified) thus
causing undefined behavior. It it were value-initialized e.g. with '{}' the
problem would not happen.
More information about the Gcc-bugs
mailing list