为何该数据结构实现中调用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
相关产品推荐
相关产品推荐

