使用malloc创建头结点的坑
首先,malloc()是動(dòng)態(tài)內(nèi)存分配函數(shù),用來(lái)向系統(tǒng)請(qǐng)求分配內(nèi)存空間。當(dāng)無(wú)法知道內(nèi)存具體的位置時(shí),想要綁定真正的內(nèi)存空間,就要用到malloc()函數(shù)。因?yàn)閙alloc只管分配內(nèi)存空間,并不能對(duì)分配的空間進(jìn)行初始化,所以申請(qǐng)到的內(nèi)存中的值是隨機(jī)的,經(jīng)常會(huì)使用memset()進(jìn)行置0操作后再使用。
與其配套的是free(),當(dāng)申請(qǐng)到的空間不再使用時(shí),要用free()函數(shù)將內(nèi)存空間釋放掉,這樣可以提高資源利用率,最重要的是----就是因?yàn)樗梢陨暾?qǐng)內(nèi)存空間,然后根據(jù)需要進(jìn)行釋放,才被稱為“動(dòng)態(tài)內(nèi)存分配”!
void *malloc(int size);
說(shuō)明:malloc?向系統(tǒng)申請(qǐng)分配指定size個(gè)字節(jié)的內(nèi)存空間。返回類型是?void*?類型。void*?表示未確定類型的指針。C,C++規(guī)定,void*?類型可以強(qiáng)制轉(zhuǎn)換為任何其它類型的指針。
從函數(shù)聲明上可以看出。malloc?和?new?至少有兩個(gè)不同:
new 可以自動(dòng)返回指定類型的指針,并且可以自動(dòng)計(jì)算所需要大小。
比如:
int *p;
p = new int;? ? ? ? ? ? ? ? ? ?//返回類型為int*?類型(整數(shù)型指針),分配大小為?sizeof(int);
或:
int* parr;
parr = new int [100];? ? ? //返回類型為?int*?類型(整數(shù)型指針),分配大小為?sizeof(int) * 100;
而?malloc?則必須由我們計(jì)算要字節(jié)數(shù),并且在返回后強(qiáng)行轉(zhuǎn)換為實(shí)際類型的指針。
int* p;
p = (int *) malloc (sizeof(int));
其次
1.malloc(0)會(huì)返回一個(gè)非空指針
2.malloc(0)返回的指針,對(duì)其使用free不會(huì)出錯(cuò)
3.malloc(-1)在vs和vc下運(yùn)行出錯(cuò),程序卡死在malloc那一行,linux則編譯報(bào)錯(cuò)
最后
在創(chuàng)建鏈表的帶頭結(jié)點(diǎn)時(shí),切記最好用 :
struct ListNode*cur= (struct ListNode*)malloc(sizeof(struct ListNode));
切記不要用struct ListNode*cur=malloc(0);? ? ? !!!!!
總結(jié)
以上是生活随笔為你收集整理的使用malloc创建头结点的坑的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 批量选中删除(包含全选)---jsp,s
- 下一篇: Pytorch上下采样函数--inter