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

为何该数据结构实现中调用getDuration时出现段错误?

段错误原因及修复方案

问题现象

直接使用sAppointment类型时代码运行正常,但切换为包含sAppointment指针的sListEntry类型后,调用getDuration函数并输入内容时触发段错误。

问题根源

创建sListEntry的代码仅为sListEntry结构体本身分配了内存,未初始化其内部的sAppointment指针。当getDuration尝试通过这个指针访问sAppointment的成员时,本质是在访问一块未分配的非法内存,直接触发段错误。

修复方法

  • 分配sListEntry内存后,必须为内部的sAppointment指针也分配内存:
    sListEntry* entry = malloc(sizeof(sListEntry));
    if (!entry) { /* 处理内存分配失败逻辑 */ }
    // 为内部指针分配内存
    entry->appt_ptr = malloc(sizeof(sAppointment));
    if (!entry->appt_ptr) {
        // 分配失败时要释放已分配的entry,避免内存泄漏
        free(entry);
        /* 处理内存分配失败逻辑 */
    }
    
  • 若暂时不需要使用sAppointment,可先将指针初始化为NULL避免野指针:
    sListEntry* entry = malloc(sizeof(sListEntry));
    if (!entry) { /* 处理内存分配失败逻辑 */ }
    entry->appt_ptr = NULL;
    
    后续使用前需先检查指针是否非NULL,确认分配内存后再访问其成员。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 07:34:53