C语言单链表的若干问题

最近在百度知道上,看到了一个网友问的关于单链表的程序(这里),建立完单链表后打印单链表时总是出现野指针错误,仔细看了下程序,应该是在执行完createLn函数后,la相当于没起作用。 基于此特意研究了一下C语言中的单链表实现,在此做个小结。

结构定义:

typedef struct {

    ElementType data;
    struct Node *next;

}Node;
typedef Node * Linklist;

在实现上,主要有以下两种情况:

1.使用上面定义的Linklist直接当做参数传递

int main(void){
    Linklist ll = (Linklist) malloc(sizeof (Node));
    int size = SIZE;
    createLinklist(ll, size);
    printLinklist(ll);
}

void createLinklist(Linklist ll, int size) {

}

void printLinklist(Linklist ll) {

}

需要注意的是:

a.main函数中ll必须在main函数中使用malloc分配内存,如果在createLinklist中分配内存,那么在调用createLinklist结束的时候,分配的内存将会被释放,在执行printLinklist的时候,就会出现野指针的情况。

b.createLinklist当中引用结构体成员变量的时候应该使用ll->data或者ll->next来引用。

2.使用指向Linklist的指针来作为参数传递

int main(void){
    Linklist ll;// = (Linklist) malloc(sizeof (Node));
    int size = SIZE;
    createLinklist(&ll, size);
    printLinklist(ll);//as before
}

void createLinklist(Linklist * ll, int size) {
    (*ll) = (Linklist) malloc(sizeof (Node));
}

void printLinklist(Linklist ll) {

}

需要注意的是:

a.当使用指向指针的指针的时候,可以将malloc分配内存的时机放到createLinklist当中去。

b.在createLinklist当中引用结构体成员时应该是(*ll)->data,(*ll)->next而不是ll->data或者ll->next.


C语言中,内存管理以及指针的应用这一块儿,仍然是掌握的不到家,接下来的几天还要继续深入探讨。进一步的总结留待补充。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值