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.

Reply via email to