Linux C 学习 单向链表
生活随笔
收集整理的這篇文章主要介紹了
Linux C 学习 单向链表
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
最近從Linux C數據結構和算法學起,下面是一個單向鏈表的寫法,代碼如下:
[cpp]?view plaincopy
結果如下:
單向鏈表建立容易犯錯誤的是這一塊:
??if(n==1)
? ? {
? ? ?head=p1;
? ? }
? ? else
? ? ?{
? ? ? ?p2->next=p1;
? ? ?}
? ? ? ?p2=p1;
? ? ? ?p1=(List *)malloc(sizeof(List));
? ? ? ?scanf("%d",&p1->data);
? ? ? ? // printf("\n%d\n",p1->data);
? ?}
先判定頭指針,然后再重新為p1申請一片內存,來存放下一個鏈表里的內容
malloc()最容易出現的問題是內存泄露,所以一定要記得free();
下面有個例子:
兄弟問:" free(p);p=NUll;",為啥free(p)之后,還要置p=NULL呢?有必要么?
free(p)只是將p指向的空間釋放掉了,但是p并不等于NULL;
code:
{
??? int *p;
??? p = (int *)malloc(sizeof(int) * 10);
??? printf("before free:? p=%p\n",p);
??? free(p);
??? printf("after free: p = %p\n",p);
??? printf("%d\n",p[0]);
??? p=NULL;
??? printf("%d\n",p[0]);
}
result:
before free:? p=0x8fa7008
after free: p = 0x8fa7008
0
段錯誤
也就是p雖然有值,但其指向的空間已經被釋放掉了。如果在后續的code中再用到p,就會出現錯誤,而這種錯誤是不太明顯的。如果顯式的置為null的話,就可以使錯誤馬上顯現出來。從而避免了調試程序中種種詭異的麻煩。
結論:
?????????? 如果在程序中free(p)之后,p不會再用,則令p=NULL無所謂。
?????????? 如果在程序中free(p)之后,p還會用到,則令p=NULL,還原p為純凈的變量,便于以后差錯。
總結
以上是生活随笔為你收集整理的Linux C 学习 单向链表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: laya fgui 超简单的UI框架
- 下一篇: Linux C编程---指针数组简析(二