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