十年網(wǎng)站開(kāi)發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專(zhuān)業(yè)推廣+無(wú)憂售后,網(wǎng)站問(wèn)題一站解決
1、不可以的。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)存列表。
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)公司!專(zhuān)注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、微信小程序定制開(kāi)發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了鐵東免費(fèi)建站歡迎大家使用!
2、malloc 和 free 是在系統(tǒng)的棧上分配空間。malloc是申請(qǐng),意思就是告訴系統(tǒng),我要用一塊RAM,給我用了別人就不要用了。free是釋放,意思是告訴系統(tǒng),給我的這塊RAM我用完了,不再用了,系統(tǒng)可以把它干別的了。
3、free(q);q = NULL;后,q和p指向的空間被釋放,且q被賦值為NULL,但是此時(shí)p變量的值并沒(méi)有改變,即其值還是原來(lái)申請(qǐng)的空間的首地址。
4、屬于內(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ù)組的方法。
5、涉及到內(nèi)存泄漏。舉個(gè)小片段:char *a = (char *)malloc(100);a = (char *)malloc(100);free(a);分配了兩次,只能free最后一次分配的,前一次分配的,丟掉了,找不回來(lái)。
6、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)制類(lèi)型轉(zhuǎn)換為需要開(kāi)辟的空間的數(shù)據(jù)類(lèi)型。
不可以的。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)存列表。
free(*add(a,b));顯然是寫(xiě)錯(cuò)了,應(yīng)該是free(add(a,b));才對(duì)。改后從原理到語(yǔ)法都是正確的,是完全合法有效的。
free是釋放,意思是告訴系統(tǒng),給我的這塊RAM我用完了,不再用了,系統(tǒng)可以把它干別的了。
那么,使用new, GlobalAlloc之類(lèi)的方式分配的內(nèi)存可不可以使用free呢。我的回答是,盡量不要,大部分情況都會(huì)帶來(lái)風(fēng)險(xiǎn)。這里面涉及new, malloc, GlobalAlloc, HeapAlloc, LocalAlloc,VirtualAlloc等函數(shù)的區(qū)別。
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ì)造成程序崩潰。
這樣吧,給你個(gè)例子 void main(){ int a[100]; free(a);//出錯(cuò),無(wú)法釋放固定空間。
函數(shù)聲明:void free(void *block);即: void free(指針變量);之所以把形參中的指針聲明為 void* ,是因?yàn)閒ree必須可以釋放任意類(lèi)型的指針,而任意類(lèi)型的指針都可以轉(zhuǎn)換為void *。
通俗講就是一個(gè)分配空間的函數(shù),在頭文件”stdlib“內(nèi),給一個(gè)變量或指針?lè)峙湟欢ù笮〉目臻g,一般要與size一起用。他的返回值是用處不大。free是一個(gè)釋放空間的函數(shù),經(jīng)malloc等函數(shù)分配空間后,取消其空間就用free函數(shù)。