C語言中動態記憶體分配的malloc函數

WBOY
發布: 2024-01-17 09:09:06
轉載
883 人瀏覽過

C語言中動態記憶體分配的malloc函數

C語言中的malloc函數

需要包含頭檔:

#i nclude

#i nclude

函數宣告(函數原型):

void *malloc(int size);

malloc函數用於向系統申請分配指定大小的記憶體空間,傳回類型為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共6個單位記憶體

展開全部

你分兩次分配內存,前一次3個int,可惜你把它丟失了,第二次分配了三個還用這個指針,你沒給新內存頭三個int賦值,直接越界寫了界外的3個int單元,程式沒有立即崩潰已經是很僥倖了

int *p, *p1,i;

p = (int *)malloc(3*sizeof(int));

for(i=0;i

printf("\n int put:");

scanf("%d",p i);

}

p1 = (int *)malloc(3*sizeof(int));

for(i=0; i

printf("\n int put:");

scanf("%d",p1 i);

}

for(i=0;i

for(i=0;i

超簡單的malloc函數問題

這個可以看一下malloc函數的原型

void* malloc(int)

malloc的參數是一個整形,表示要申請的記憶體數,以位元組為單位,而返回值是指向那段記憶體的一個指針,是空型別的指針。

而sizeof是一個運算符,透過他能得到一個型別或變數的佔記憶體的位元組數,結果為整形。所以pp=(float *)malloc(sizeof(float));實際上先計算sizeof(float),得到一個float型佔記憶體的位元組數,32位元環境下應該是4位元組,結果就為4,接著malloc(4)申請了一個4位元組的記憶體空間,並傳回這塊記憶體區域的位址,然後強制轉換為float*型別。

關於鍊錶是每一個鍊錶的元素保存了下一個或上一個元素的位址,自然每一個鍊錶元素都要佔記憶體空間的,當要新加入一個鍊錶的元素時首先要為這個元素分配地址,不然資料沒有地方保存。

以上是C語言中動態記憶體分配的malloc函數的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:docexcel.net
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!