關於鏈表的問題?
01-04
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 |