不可以的。malloc, alloc, free是c定義的一組內(nèi)存管理的API函數(shù),當(dāng)你調(diào)用malloc、alloc分配內(nèi)存時(shí),不僅僅是從堆里面分配得到了可用內(nèi)存,實(shí)際上內(nèi)存管理子系統(tǒng)還會(huì)維護(hù)了內(nèi)存列表。
創(chuàng)新互聯(lián)自2013年創(chuàng)立以來(lái),是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目網(wǎng)站制作、做網(wǎng)站網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元泌陽(yáng)做網(wǎng)站,已為上家服務(wù),為泌陽(yáng)各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:028-86922220
free(*add(a,b));顯然是寫(xiě)錯(cuò)了,應(yīng)該是free(add(a,b));才對(duì)。改后從原理到語(yǔ)法都是正確的,是完全合法有效的。
當(dāng)n為0時(shí),for循環(huán)就不會(huì)被執(zhí)行,ps也就不會(huì)被分配空間,在這種情況下free顯然是不合適的,會(huì)造成程序崩潰。
函數(shù)聲明:void free(void *block);即: void free(指針變量);之所以把形參中的指針聲明為 void* ,是因?yàn)閒ree必須可以釋放任意類型的指針,而任意類型的指針都可以轉(zhuǎn)換為void *。
free(q);q = NULL;后,q和p指向的空間被釋放,且q被賦值為NULL,但是此時(shí)p變量的值并沒(méi)有改變,即其值還是原來(lái)申請(qǐng)的空間的首地址。
首先肯定你的主動(dòng)思考,學(xué)習(xí)的主動(dòng)性 然后明確說(shuō),malloc/free有多種不同的實(shí)現(xiàn),可以認(rèn)為都是采用第二種辦法,或者變相采用第二種辦法。首先說(shuō)靜態(tài)變量行不通,不太可能只調(diào)用一次malloc,調(diào)第二次就覆蓋掉了,行不通。
free函數(shù)的用法釋放ptr指向的存儲(chǔ)空間。被釋放的空間通常被送入可用存儲(chǔ)區(qū)池,以后可在調(diào)用malloc、realloc以及calloc函數(shù)來(lái)再分配。free 不管指針指向多大的空間,均可以正確地進(jìn)行釋放,這一點(diǎn)釋放比 delete/delete [] 要方便。
C管理內(nèi)存大致可以理解為兩種,分配在棧上的,一個(gè)是分配在堆上的。臨時(shí)變量,動(dòng)態(tài)變量,分配在棧上,運(yùn)行完,直接彈出棧,就沒(méi)了。分配在堆上的內(nèi)存,釋放的時(shí)候,基本上可以理解為,指針不指這里了。
free是釋放,意思是告訴系統(tǒng),給我的這塊RAM我用完了,不再用了,系統(tǒng)可以把它干別的了。
屬于內(nèi)存管理的兩個(gè)函數(shù),malloc是申請(qǐng)內(nèi)存的,free是釋放內(nèi)存的。malloc一般用法:int *t=NULL;t=(int *)malloc(sizeof(int));也可以在sizeof前面加上一個(gè)n*這就成了一個(gè)動(dòng)態(tài)分配數(shù)組的方法。
因?yàn)閒ree函數(shù)僅僅是告訴操作系統(tǒng),這一塊內(nèi)存被釋放了,可以用來(lái)作其它用途。但是,由于你沒(méi)有重新對(duì)這塊內(nèi)存進(jìn)行寫(xiě)操作,所以內(nèi)存中的變量數(shù)值并沒(méi)有發(fā)生變化。所以輸出值不變。
1、p=(char *)malloc(sizeof(char)*20);malloc函數(shù)申請(qǐng)空間,sizeof(char) * 20表示malloc開(kāi)辟空間字節(jié)數(shù)為20字節(jié),malloc前的char * 表示開(kāi)辟空間進(jìn)行強(qiáng)制類型轉(zhuǎn)換為需要開(kāi)辟的空間的數(shù)據(jù)類型。
2、1,malloc與free是C++/C語(yǔ)言的標(biāo)準(zhǔn)庫(kù)函數(shù),new/delete是C++的運(yùn)算符。它們都可用于申請(qǐng)動(dòng)態(tài)內(nèi)存和釋放內(nèi)存。2, 對(duì)于非內(nèi)部數(shù)據(jù)類型的對(duì)象而言,光用maloc/free無(wú)法滿足動(dòng)態(tài)對(duì)象的要求。
3、free是一個(gè)釋放空間的函數(shù),經(jīng)malloc等函數(shù)分配空間后,取消其空間就用free函數(shù)。
4、free(void*ptr);功能:釋放ptr所指向的一塊內(nèi)存空間,ptr是一個(gè)任意類型的指針變量,它指向被釋放區(qū)域的首地址。被釋放區(qū)應(yīng)是由malloc或calloc函數(shù)所分配的區(qū)域?!纠糠峙湟粔K區(qū)域,輸入一個(gè)學(xué)生數(shù)據(jù)。
5、函數(shù)原型及說(shuō)明:void *malloc(long NumBytes):該函數(shù)分配了NumBytes個(gè)字節(jié),并返回了指向這塊內(nèi)存的指針。如果分配失敗,則返回一個(gè)空指針(NULL)。關(guān)于分配失敗的原因,應(yīng)該有多種,比如說(shuō)空間不足就是一種。
6、free函數(shù)的用法釋放ptr指向的存儲(chǔ)空間。被釋放的空間通常被送入可用存儲(chǔ)區(qū)池,以后可在調(diào)用malloc、realloc以及calloc函數(shù)來(lái)再分配。