Boost :: posix_time not working in release builds

I want to open a new log file that is launched by the program, so I am creating a file name with the current time.

FILE * fplog;

void OpenLog()
{
    boost::posix_time::ptime now = boost::posix_time::second_clock::local_time();
    char buf[256];
    sprintf(buf,"ecrew%d%02d%02d_%02d%02d%02d.log",
        now.date().year(),now.date().month(),now.date().day(),
        now.time_of_day().hours(),now.time_of_day().minutes(),now.time_of_day().seconds()); 
    fplog = fopen(buf,"w");

}

This works great in debug builds, creating files with names like

ecrew20110309_141506.log

However, the same code unexpectedly crashes in a release

ecrew198619589827196617_141338.log

By the way, this also doesn't work the same:

boost::posix_time::ptime now = boost::posix_time::second_clock::local_time();
char buf[256];

boost::gregorian::date day (boost::gregorian::day_clock::local_day());

sprintf(buf,"ecrew%d%02d%02d_%02d%02d%02d.log",
    day.year(),day.month(),day.day(),
now.time_of_day().hours(),now.time_of_day().minutes(),now.time_of_day().seconds()); 

fplog = fopen(buf,"w");

It works:

boost::posix_time::ptime now = boost::posix_time::second_clock::local_time();
char buf[256];
sprintf(buf,"ecrew%s_%02d%02d%02d.log",
    to_iso_string( boost::gregorian::day_clock::local_day() ).c_str(),
    now.time_of_day().hours(),now.time_of_day().minutes(),now.time_of_day().seconds()); 
fplog = fopen(buf,"w");

I still wondered why the previous two versions do not work in release builds, but work in debugging.

+3
source share
1 answer

, , , , (day_clock:: local_day() Release, , Win XP + Boost 1.46), , , .

, -, ( , ) 16- , , 32- , .

, - 16 :

date todaysdate(day_clock::local_day());
int year = todaysdate.year() & 0xFFFF;

, :

date todaysdate(day_clock::local_day());
int year = todaysdate.year();

.

Valmond

+4

All Articles