c語言malloc
① c語言, malloc
char *p=(char*)malloc(10)
這種寫法要嚴謹一點,直接表明了申請空間大小。
還可以優化成
char*p=(char*)malloc(10*sizeof(char));
此處char看不出效果,int的位元組數是根據編譯器定的,
int*p=(int*)malloc(10*sizeof(int));
這樣就比較好了!
② c語言malloc函數的用法
出現了兩個錯誤:1、phonebook=(struct date *)malloc(100*sizeof(struct date*));這個語句中的(struct date *)應該是(struct data *),這個是樓主太粗心了。2、這里的類型明顯不匹配,phonebook的類型是指向struct data結構體的指針數組,struct data *的類型是指向struct data結構體的指針。我沒有看具體程序是什麼功能,若是改成這樣程序運行是沒有錯誤的。phonebook[0]=(struct data*)malloc(100*sizeof(struct data));
③ C語言中的malloc()函數
需要包含頭文件:
#i nclude
或
#i nclude
函數聲明(函數原型):
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));
第一、malloc 函數返回的是 void * 類型,如果你寫成:p = malloc (sizeof(int)); 則程序無法通過編譯,報錯:「不能將 void* 賦值給 int * 類型變數」。所以必須通過 (int *) 來將強制轉換。
第二、函數的實參為 sizeof(int) ,用於指明一個整型數據需要的大小。如果你寫成:
int* p = (int *) malloc (1);
代碼也能通過編譯,但事實上只分配了1個位元組大小的內存空間,當你往裡頭存入一個整數,就會有3個位元組無家可歸,而直接「住進鄰居家」!造成的結果是後面的內存中原有數據內容全部被清空。
malloc 也可以達到 new [] 的效果,申請出一段連續的內存,方法無非是指定你所需要內存大小。
比如想分配100個int類型的空間:
int* p = (int *) malloc ( sizeof(int) * 100 ); //分配可以放得下100個整數的內存空間。
另外有一點不能直接看出的區別是,malloc 只管分配內存,並不能對所得的內存進行初始化,所以得到的一片新內存中,其值將是隨機的。
除了分配及最後釋放的方法不一樣以外,通過malloc或new得到指針,在其它操作上保持一致。
④ C語言關於MALLOC的用法
malloc是開辟一個空間,然後把只想這個空間的指針轉換為與p相同類型指針,然後讓p指向這個空間,就可以存東西西了。很靈活,大程序這樣用超節省空間
⑤ c語言中malloc函數
unsigned是無符號的意思
unsigned int 就是非負整數
也就是size只能是0或者正數
⑥ C語言中怎麼使用malloc函數
malloc只是動態分配內存存儲空間。
void *malloc(long nBytes):該函數分配了nBytes個位元組,並返回了指向這塊內存的指針。如果分配失敗,則返回一個空指針(NULL)
例如:char *Ptr = NULL;
Ptr = (char *)malloc(100 * sizeof(char));
就是這樣!當然,具體情況要具體分析以及具體解決。比如說,你定義了一個指針,在一個函數里申請了一塊內存然後通過函數返回傳遞給這個指針,那麼也許釋放這塊內存這項工作就應該留給其他函數了
⑦ C語言中的malloc函數用法>
C語言中malloc是動態內存分配函數。
函數原型:void *malloc(unsigned int num_bytes)。
參數:num_bytes 是無符號整型,用於表示分配的位元組數。
注意:當內存不再使用時,應使用free()函數將內存塊釋放。函數返回的指針一定要適當對齊,使其可以用於任何數據對象。關於該函數的原型,在以前malloc返回的是char型指針,新的ANSIC標准規定,該函數返回為void型指針,因此必要時要進行類型轉換。
實現malloc的方法:
首先我們要確定所採用的數據結構。一個簡單可行方案是將堆內存空間以塊的形式組織起來,每個塊由meta區和數據區組成,meta區記錄數據塊的元信息(數據區大小、空閑標志位、指針等等)。
數據區是真實分配的內存區域,並且數據區的第一個位元組地址即為malloc返回的地址 。
⑧ C語言 關於malloc的用法
char*a3;
x=strlen(a1);
y=strlen(a2);
z=x+y+1;
a3=(char*)malloc(z);
⑨ c語言malloc函數
1、malloc 向系統申請分配指定size個位元組的內存空間。返回類型是 void* 類型。void* 表示未確定類型的指針。C,C++規定,void* 類型可以強制轉換為任何其它類型的指針。
2、定義
原型:extern void *malloc(unsigned int num_bytes);
頭文件:#include <stdlib.h>
功能:分配長度為num_bytes位元組的內存塊
返回值:如果分配成功則返回指向被分配內存的指針(此存儲區中的初始值不確定),否則返回空指針NULL。當內存不再使用時,應使用free()函數將內存塊釋放。函數返回的指針一定要適當對齊,使其可以用於任何數據對象。
說明:關於該函數的原型,在以前malloc返回的是char型指針,新的ANSIC標准規定,該函數返回為void型指針,因此必要時要進行類型轉換。
名稱解釋:malloc的全稱是memory allocation,中文叫動態內存分配,當無法知道內存具體位置的時候,想要綁定真正的內存空間,就需要用到動態的分配內存。
相關函數:calloc、realloc、free、_alloca
3、函數全名:void *malloc(size_t size);
備註:void* 表示未確定類型的指針,void *可以指向任何類型的數據,更明確的說是指申請內存空間時還不知道用戶是用這段空間來存儲什麼類型的數據(比如是char還是int或者...)