malloc函式的問題 80

2023-08-13 20:46:17 字數 3675 閱讀 6541

malloc函式的問題

1樓:小魚

你dest2 只分配了記憶體 沒有把資料拷貝進去 所以dest2裡面的資料都是隨機的,需要在malloc下再加一句 strcpy(dest2,source); 另外使用malloc後要free才行。

malloc函式的用法是什麼?

2樓:小耳朵愛聊車

c語言中malloc是動態記憶體分配函式。

函式原型:void *malloc(unsigned int num_bytes);

引數:num_bytes 是無符號整型,用於表示分配的位元組數。

返回值:如果分配成功則返回指向被分配記憶體的指標(此儲存區中的初始值不確定),否則返回空指標 表示未確定型別的指標,void *可以指向任何型別的資料,更明確的說是指申請記憶體空間時還不知道使用者是用這段空間來儲存什麼型別的資料(比如是char還是int或者。

功能:分配長度為num_bytes位元組的記憶體塊。

注意:當記憶體不再使用時,應使用free()函式將記憶體塊釋放。函式返回的指標一定要適當對齊,使其可以用於任何資料物件。

關於該函式的原型,在以前malloc返回的是char型指標,新的ansic標準規定,該函式返回為void型指標,因此必要時要進行型別轉換。

c語言中malloc是什麼

3樓:潮孤陽

c語言中malloc是動態記憶體分配函式,其原型為:void*malloc(unsignedintnum_bytes);

其中,size為需要分配的記憶體空間的大小,num_bytes是無符號整型,用於表示分配的位元組數。malloc()在堆區分配一塊指定大小的記憶體空間,用來存放資料。這塊記憶體空間在函式執行完成後不會被初始化,它們的值是未知的。

如果分配成功則返回指向被分配記憶體的指標(此儲存區中的初始值不確定),否則返回空指標null。

malloc函式怎麼使用

4樓:惠企百科

size僅僅為申請記憶體位元組大小,與申請記憶體塊中儲存的資料型別無關,故程式設計時需要通過以下方式給出:"長度 * sizeof(資料型別)"。

具體使用及編寫方式如下圖:

動態分配記憶體,輸入5個資料,並把低於60的值列印出來:

malloc函式的用法是什麼?

5樓:小耳朵愛聊車

malloc使用須要包括標頭檔案:

#include ''

例如: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、申請了記憶體空間後,必須檢查是否分配成功。

2、當不需要再使用申請的記憶體時,記得釋放;釋放後應該把指向這塊記憶體的指標指向null,防止程式後面不小心使用了它。

3、這兩個函式應該是配對。如果申請後不釋放就是記憶體洩露;如果無故釋放那就是什麼也沒有做。釋放只能一次,如果釋放兩次及兩次以上會出現錯誤(釋放空指標例外,釋放空指標其實也等於啥也沒做,所以釋放空指標釋放多少次都沒有問題)。

c語言中malloc函式的使用方法

6樓:匿名使用者

(分配型別 *)malloc(分配元素個數 *sizeof(分配型別))

如果成功,則返回該空間首地址,該空間沒有初始化,如果失敗,則返回0

7樓:鹹曉絲

返回值型別為 void *,呼叫格式為:malloc(size),size的型別為unsigned int 。

malloc函式用來分配size個位元組的儲存區,返回一個指向儲存區首地址的基型別為void的地址。若沒有足夠的記憶體單元供分配,函式返回空(null)

通過呼叫malloc函式所分配的動態儲存單元中沒有確定的初值,這個儲存單元也沒有名字,吸能靠指標來引用它。

例:int *pi;

float *pf;

pi=(int *)malloc(2);

pf=(float *)malloc(4);

因為malloc函式的返回的地址為void *,在呼叫函式時,必須延用強制型別轉換將其轉換為所需要的型別。括號中的*號代表返回的是指標型別的。

8樓:匿名使用者

void *malloc( size_t size );該函式包含於和中,分配一塊記憶體區域,若成功則返回指向該區域的指標,否則返回null。

下面的例子中分配了一塊記憶體區域,然後把它釋放:

char * x;

x = malloc(_max_path);

free(x);

malloc函式怎麼使用

9樓:小鈉

void *malloc(int size);

說明:malloc 向系統申請分配指定size個位元組的記憶體空間。返回型別是 void* 型別。

void* 表示未確定型別的指標。c,c++規定,void* 型別可以強制轉換為任何其它型別的指標。

從函式宣告上可以看出。malloc 和 new 至少有兩個不同: new 返回指定型別的指標,並且可以自動計算所需要大小。

比如:int *p;p = new int; /返回型別為int* 型別(整數型指標),分配大小為 sizeof(int);或:int* parrparr = 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得到指標,在其它操作上保持一致。

關於malloc函式的問題

void p int a void 型別函式返回 int 型別指標,開玩笑嘛。立即刪掉 include include void p int a void main 這樣 把m直接作為引數是不行的,因為傳遞的是m的副本要通過引數傳遞 這樣寫void p int a 完整的 include inclu...

數學函式問題,數學函式問題?

第一個怎麼可能正確?翻白眼 利用二次函式的性質得到 x 8x的最大值是16,請問這時候x是多少?是4.也就是說x 4時,3 x y 取到最大值16,是這樣嗎?你自己看看此時y有實數解嗎?做不等式的題目,最恨的就是做完了不去驗證一下等號是否能取到.你這道題但凡是去驗證最大值為16 3時x和y是否存在,...

函式凸與凹的問題,凹函式和凸函式的問題

沒寫反,這裡的問題在於凸和凹的定義,不同的書是不一樣的,往往正好相反,原因在 內於看圖的容位置不同,你從曲面上面往下看,和從曲面下面往上看,凹凸性正好相反,所以凡是講到凹凸性的書,你都要仔細看看,它裡面的凹凸是如何定義的。凹函式和凸函式的問題 圖象可以判斷。用盛水法則 形象得要死 可以盛水的 凹 啊...