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

无法创建第二个双向链表:初始化失败问题求助

问题原因分析
  • 你在main里定义的LIST* list1, *list2;是未初始化的野指针,它们没有指向任何有效的LIST结构体内存空间。
  • 调用create_list(list1)时,函数里直接操作p->head和p->last本质是修改随机内存地址的值,属于C语言中的未定义行为。第一个链表看似正常只是巧合(比如刚好那块内存暂时可写),第二个链表触发了内存访问错误导致初始化失败。
修正方案

有两种常用的修复方式:

方案1:在栈上分配LIST结构体

直接定义LIST类型的变量,而非指针,调用函数时传入它们的地址:

int main(){
    LIST list1, list2; // 栈上分配实际的LIST对象
    create_list(&list1); // 传地址给函数
    create_list(&list2);
    return 0;
}

方案2:在堆上动态分配LIST结构体

如果需要链表在main函数外也能存活(比如后续要作为返回值或全局使用),可以用malloc分配内存,记得最后释放:

#include <stdlib.h> // 需包含stdlib.h以使用malloc/free

int main(){
    LIST* list1 = malloc(sizeof(LIST));
    LIST* list2 = malloc(sizeof(LIST));
    
    if(list1 == NULL || list2 == NULL){
        printf("内存分配失败\n");
        return 1;
    }
    
    create_list(list1);
    create_list(list2);
    
    // 后续使用完链表后,需实现销毁函数释放节点内存,再释放LIST结构体
    // destroy_list(list1);
    // destroy_list(list2);
    free(list1);
    free(list2);
    
    return 0;
}
额外注意事项
  • 确保ins和display函数能正确处理传入的LIST指针,避免类似野指针问题。
  • 动态分配内存后必须释放,防止内存泄漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 20:54:16