標籤:

關於鏈表的問題?

void addArcNode(VNode vNode,int adjvex,int info)

{

ArcNode *newArc = (ArcNode*)malloc(sizeof(ArcNode));

if(!newArc)

exit(0);

newArc-&>adjvex = adjvex;

newArc-&>info = info;

newArc-&>nextarc = vNode.firstarc;

vNode.firstarc = newArc;

}

這個函數會被調用多次,但malloc得到的指針,什麼時候free呢。動態鏈表不用釋放?


vNode.firstarc 不就是個鏈表嘛,當然要找個時候for循環一把free掉。但是有些人覺得我這個鏈表是一次性的,算完程序也結束了,進程結束還釋放什麼,然後乾脆就不釋放了。

後來程序越寫越大,然後發現如果真的要釋放,輕則改設計,重則重寫,然後GG(逃

通常一次性生成大量的同類型對象,事情做完之後就幹掉的,都會用vector&

, int&>&>的等價結構做一個池。事情幹完之後,整個池扔掉,一了百了。


這是構建鏈表嘛,你都還在用肯定就不能刪除,等你什麼時候不要鏈表了或者不要其中的某個節點了,才去刪除呀。如果不要某個節點了那肯定要寫一個erase函數去刪除節點,那麼釋放內存的責任就需要在erase里完成,如果整個鏈表都不需要了,就需要類似於析構函數這種來把整個鏈表每個節點依次釋放掉


不需要用的時候遍歷整個鏈表一起釋放

這種寫法一般都只會出現在操作頻度相對較低的地方。

對穩定性有要求的都會做內存池


推薦閱讀:

C/C++ 中 exit() 函數的參數到底有什麼意義?
怎樣改造一個有序的鏈表,使其能夠具有高效找到Node在鏈表中index(在鏈表中的第幾個結點)?
計算機圖形學研究生在研究生階段怎麼提升自己實力?
有哪些 C++ 的 JSON 庫比較好呢?
C++為什麼函數參數個數不同還能出錯啊?

TAG:C |