麻zer法ker 2021-08-10 09:18 采纳率: 100%
浏览 105
已结题

学生党,有没有耐心的看一下,为什么每次从 Initlist_L 函数出来之后 l 的内存都会被释放,导致遍历函数出错?

typedef int ElemType;





typedef struct Node{       
    ElemType data;        
    struct Node* next;     
}Node,*LinkList;      


int main(int argc, const char * argv[]) {
    LinkList l = NULL;
    
    if( !Initlist_L( l ) ){
        PrintList_L( l );      //遍历链表元素
    }else {
        printf( "分配内存失败." );
    }
}

int Initlist_L( LinkList l ){      //创建链表并初始化
    int a,b;
    int c = 0;
    Node* p,*q = NULL;
    l = (LinkList)malloc(sizeof(Node));
    l->next = NULL;               //创建头结点
    if( !l ){
        return -1;
    }
    printf( "是否输入数据?Yes:1;No: 0" );
    scanf( "%d",&a );
    while( a ){
        if( !(c++) ){
        p = (Node*)malloc(sizeof(Node));
        printf( "请输入数据:");
        scanf( "%d",&b );
        p->data = b;
        p->next = l->next;
        l->next = p;
        q = p;
        }else {
            p = (Node*)malloc(sizeof(Node));
            printf( "请输入数据:");
            scanf( "%d",&b );
            p->data = b;
            q->next = p;
            p->next = NULL;
            q = p;
        }
        printf( "是否继续输入数据?Yes: 1; No: 0");
        scanf( "%d",&a );

    }
    printf( "\n" );
    return 0;
};      


  • 写回答

3条回答 默认 最新

  • qzjhjxj 2021-08-10 09:38
    关注

    函数:int Initlist_L(LinkList &l) 形参加上地址引用即可 。
    第58行:}; 多了 ‘ ; '号

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 8月18日
  • 已采纳回答 8月10日
  • 创建了问题 8月10日