私はこの現象に遭遇し、これが期待されているかどうかを知りたいと思います。あるtm構造のエラーが他のtm構造を破損しています
ある特定のtm構造でエラーが発生し、他のすべてが破損します。
これは、(問題を再現するminimunにストリップダウン)コード
int main()
{
cout << "----- Bug test - tm struc -----" << endl;
//--------------------------------------------
//--- Setup struct tm ---
time_t timet_Now = time(NULL);
struct tm* tm1 = localtime(&timet_Now);
struct tm* tm2 = localtime(&timet_Now);
//--- Verify OK - cout shows "28/10/2016"---
cout << tm1->tm_mday << " " << tm1->tm_mon << " " << tm1->tm_year << endl;
cout << tm2->tm_mday << " " << tm2->tm_mon << " " << tm2->tm_year << endl;
// ... so far, so good
// --- Force an error in a different tm struct (xxtm)
time_t xtimet = 1464778020000;
struct tm* xxtm = localtime(&xtimet); //<<< xxtm = null - no runtime error
//--- tm1 and tm2 are now corrupted - cout shows "-1/-1/-1"
cout << tm1->tm_mday << " " << tm1->tm_mon << " " << tm1->tm_year << endl;
cout << tm2->tm_mday << " " << tm2->tm_mon << " " << tm2->tm_year << endl;
//--- This next line crashes the application, as tm1 is corrupted
char* c = asctime(tm1);
return 0;
}
クラッシュエラーがある:MyTest.exeで0x0FA520B5(ucrtbased.dll)で未処理の例外:無効なパラメータでした無効なパラメータを致命的とみなす関数に渡されます。
'のstd :: put_time'は' time_point'なく 'TM *' – Mgetz
を取ると、nullptrリターンをチェックし、既存のlocaltime_rまたはlocaltime_sの選択肢を検討すべき理由です。 –
OOok!ありがとう@KennyOstrom。更新されます。 – user4581301