You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

程序崩溃(0xC0000005)排查:如何将整数值与当前小时相加并显示时间?

问题解决:程序崩溃与唤醒时间计算修正

一、崩溃原因(错误码0xC0000005)

错误码0xC0000005是非法内存访问,根源在这行代码:

struct tm tm = *localtime(&t);

localtime(&t)可能返回NULL(比如time(NULL)获取时间失败时),直接解引用NULL指针会触发内存访问违规。此外,time(NULL)也可能返回(time_t)-1表示获取时间失败,同样需要检查。

二、修复崩溃+正确计算唤醒时间的代码调整

修改sleepDuration函数,补充有效性检查并采用时间戳方式计算唤醒时间:

void sleepDuration(int *sleep) {
    int sleepAmount;

    time_t t = time(NULL);
    // 检查系统时间获取是否成功
    if (t == (time_t)-1) {
        printf("Failed to get current time!\n");
        return;
    }

    struct tm *tm_ptr = localtime(&t);
    // 检查本地时间转换是否成功
    if (tm_ptr == NULL) {
        printf("Failed to convert time to local time!\n");
        return;
    }
    struct tm tm = *tm_ptr;

    printf("Current time: %02d:%02d:%02d\n", tm.tm_hour, tm.tm_min, tm.tm_sec);
    printf("How many hours do you want to sleep? ");
    // 检查输入是否为有效整数
    if (scanf("%d", &sleepAmount) != 1) {
        printf("Invalid input! Please enter an integer.\n");
        // 清除输入缓冲区的无效数据
        while (getchar() != '\n');
        return;
    }

    // 用时间戳计算唤醒时间:自动处理跨天/跨月情况
    time_t wake_up_time = t + sleepAmount * 3600;
    struct tm *wake_tm = localtime(&wake_up_time);
    if (wake_tm == NULL) {
        printf("Failed to calculate wake-up time!\n");
        return;
    }

    // 更新睡眠需求值
    *sleep += sleepAmount;

    printf("After sleeping for %d hours, sleep need is: %d\n", sleepAmount, *sleep);
    printf("Wake-up time: %04d-%02d-%02d %02d:%02d:%02d\n",
           wake_tm->tm_year + 1900, wake_tm->tm_mon + 1, wake_tm->tm_mday,
           wake_tm->tm_hour, wake_tm->tm_min, wake_tm->tm_sec);
}

三、关键优化点

  • 避免空指针崩溃:增加time()和localtime()的返回值检查,防止非法内存访问。
  • 正确处理跨天时间:将时间转换为秒级时间戳,加上睡眠时长的秒数后再转回本地时间结构体,自动处理跨天、月份甚至年份的变化,替代简单累加小时数的不合理方式。
  • 输入合法性校验:检查scanf返回值,确保用户输入有效整数,同时清除输入缓冲区的无效数据,避免后续输入异常。
  • 时间字段修正:struct tm的tm_year是1900年起的偏移量,需加1900得到实际年份;tm_mon是0-11的范围,需加1得到实际月份。

内容的提问来源于stack exchange,提问作者Mehmet Emin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 19:30:06