C 生成具有固定范围的随机日期

C 生成具有固定范围的随机日期,c,undefined-behavior,time.h,C,Undefined Behavior,Time.h,我编写了一个程序,它必须检查编译器是否满足POSIX要求(因此我的time\u t变量将保存正确的日期),找到今天的年份并生成一系列随机日期。日期必须介于两年、最后一年和当前(大约)之间 不幸的是,确定当前年份的块会导致某种未定义的行为。这是我的密码: #包括 #包括 #包括 #包括 #包括 #定义n5 #定义一年31536000 #定义两年63072000 #定义TM和POSIX年份差异70 内部主(空){ //导致未定义行为的块的开始 struct tm*tm_today=(struct t

我编写了一个程序,它必须检查编译器是否满足POSIX要求(因此我的
time\u t
变量将保存正确的日期),找到今天的年份并生成一系列随机日期。日期必须介于两年、最后一年和当前(大约)之间

不幸的是,确定当前年份的块会导致某种未定义的行为。这是我的密码:

#包括
#包括
#包括
#包括
#包括
#定义n5
#定义一年31536000
#定义两年63072000
#定义TM和POSIX年份差异70
内部主(空){
//导致未定义行为的块的开始
struct tm*tm_today=(struct tm*)malloc(sizeof(struct tm));
短td_年;
今天的时间=(时间*)malloc(时间的大小);
时间t[N];
//检查编译器是否满足POSIX要求
时间检查=86400;
如果(strcmp(asctime(gmtime(&check)),“1970年1月2日星期五00:00:00\n”)!=0)
返回1;
//确定本年度
*今天=时间(空);
tm_today=gmtime(今天);
td_year=(*tm_today)。tm_year-tm_和POSIX_year_DIFF;
免费(今日);
免费(今日免费);
//导致未定义行为的块的结尾
//生成随机日期
for(无符号字符i=0;i
另外,我需要
time\t
tm
结构变量(
today
tm\u today
)用于确定今天的年份是动态的。

gmtime()
返回指向内部值的指针(或空指针),您不能将其传递到
free()
。我们失去了指向分配内存的指针

struct tm *const tm_today = gmtime(today);
if (tm_today) {
    // use it
}
// DO NOT free(tm_today) - it's not ours
gmtime()
返回指向内部值(或空指针)的指针,您不能将其传递给
free()
。我们失去了指向分配内存的指针

struct tm *const tm_today = gmtime(today);
if (tm_today) {
    // use it
}
// DO NOT free(tm_today) - it's not ours

您的问题陈述是您的代码具有“某种未定义的行为”。您实际看到了什么?请使用您的代码将其简化为您的问题的一部分。您当前的代码包含许多与您的问题无关的内容-最小的样本通常看起来类似于良好的单元测试:仅执行一项任务,输入值指定为可再现性。顺便说一句-有时它工作正常。但有时它会在程序的开始或结束时抛出错误。什么错误…?你的问题是你的代码有“某种未定义的行为”。您实际看到了什么?请使用您的代码将其简化为您的问题的一部分。您当前的代码包含许多与您的问题无关的内容-最小的样本通常看起来类似于良好的单元测试:仅执行一项任务,输入值指定为可再现性。顺便说一句-有时它工作正常。但有时它会在程序的开始或结束时抛出错误。什么错误…?gmtime分配的内存是什么?程序将在什么时候释放那个内存?那个是静态内存,它将在程序结束时被销毁。gmtime分配的内存是什么?程序将在什么时候释放内存?即静态内存,它将在程序结束时被销毁。