free(*add(a,b));顯然是寫錯了,應(yīng)該是free(add(a,b));才對。改后從原理到語法都是正確的,是完全合法有效的。
創(chuàng)新互聯(lián)建站2013年至今,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目成都網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè)網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元句容做網(wǎng)站,已為上家服務(wù),為句容各地企業(yè)和個人服務(wù),聯(lián)系電話:028-86922220
那么,使用new, GlobalAlloc之類的方式分配的內(nèi)存可不可以使用free呢。我的回答是,盡量不要,大部分情況都會帶來風險。這里面涉及new, malloc, GlobalAlloc, HeapAlloc, LocalAlloc,VirtualAlloc等函數(shù)的區(qū)別。
這樣吧,給你個例子 void main(){ int a[100]; free(a);//出錯,無法釋放固定空間。
函數(shù)聲明:void free(void *block);即: void free(指針變量);之所以把形參中的指針聲明為 void* ,是因為free必須可以釋放任意類型的指針,而任意類型的指針都可以轉(zhuǎn)換為void *。
把鏈表創(chuàng)建的函數(shù)貼出來。否則難以判斷。還有LNode 和LinkList的類型定義貼出來 再請求一次,把LNode 和LinkList的類型定義貼出來!從 L-next;的用法,我推測LinkList是一個結(jié)構(gòu)體指針類型,作用是指向鏈表頭。
釋放空間是指用“動態(tài)申請內(nèi)存函數(shù)”申請成功的空間,不是你寫的代碼占用的空間。
首先這個數(shù)組不是靜態(tài)數(shù)組,因為你沒有寫static關(guān)鍵字!所以這個數(shù)組是局部數(shù)組,進入函數(shù)時創(chuàng)建,函數(shù)結(jié)束時撤銷。這個程序編譯時一般會有警告——你返回了一個已撤銷的數(shù)組的起始地址。
是InitStack(s)吧?程序里就沒有InitSqlist()。因為棧內(nèi)容沒有初始化,所以訪問那個s-top時就出錯了,并不是分配內(nèi)存的malloc的問題。
= NULL; i = i-next ){printf( %d\t, i-num );} clear( head3 ); //只釋放一次就可以了。
所謂鏈表,就是用指針將內(nèi)存中動態(tài)分配的結(jié)點空間,鏈接起來成一個表。所以,建表的過程即是每次為新結(jié)點分配內(nèi)存;因此,釋放空間的話,也要從頭到尾,一個一個結(jié)點的釋放,這樣才能全部釋放掉。
1、你這個銷毀函數(shù)本身沒有問題,它是正確的,問題產(chǎn)生的根源在你的鏈表生成函數(shù)。你的鏈表生成函數(shù)的入?yún)⑹且粋€指針,作為形參,你能改變它指向的東西,但是不能改變形參本身體。
2、鏈接存儲方法 鏈接方式存儲的線性表簡稱為鏈表(Linked List)。
3、你的疑問中,如果改成*list = p-next,運行應(yīng)該是可以通過的。但是不推薦這樣做。為什么呢?這就要先理解FreeMem這個函數(shù),為什么用List*做參數(shù),而不是List。
4、單向鏈表的插入圖示:---[NULL](原鏈表)head---[1]---[NULL](插入后的鏈表)head 1-next圖7 空鏈表插入一個節(jié)點結(jié)合原鏈表和插入后的鏈表,就很容易寫出相應(yīng)的代碼。