乙個關於C語言裡面 MALLOC函式的問題

2025-03-04 01:05:17 字數 2362 閱讀 4976

1樓:網友

malloc 的意思是分配記憶體舉個例子。

char *p = char*)malloc(100);

就是分配100個位元組長度的 char 型別記憶體。

釋放的時候要這樣寫。

free(p);

p = null;

free 的意思是釋放掉 malloc 開闢的記憶體悄吵,但是為了防止野指標(所謂野指標是程式編寫的時候的乙個絕灶疏忽造成的bug,野指標經常會讓程式崩潰)所以要加個 p = null;

在c++語言中也有個類似的。

char *p = new char[100];

delete p;

p = null;

作用基本是一樣的。

另外這個語句也可以用來動態宣告陣列例如:

int *p = int*)malloc(100);

free(p);

p = null;

這個宣告就會有 p[0],p[1],p[2]..這樣的陣列。一共100個(即到p[99]) 當然其他型別如 char 型別陣列也並運扮是這樣宣告的。

需要注意的是用完一定要釋放 free(p);

注意:釋放完後一定要 p = null; 這句非常重要。

2樓:網友

生成乙個長度為len,型別為booktype的陣列吧。

什麼時候需要malloc c語言

3樓:萬楊

malloc是記憶體分配函式,free是相對應的釋放記憶體函式。

第乙個問題:記憶體是夠大的,但是每乙個程式都需要一段記憶體空間來執行,如果這之間記憶體相互交叉使用,也是a程式使用了b程式的記憶體,並修改了這段本不屬於自己的記憶體資料,會有不可預知的結果,malloc函式就給程式設計師提供了申請一段屬於自己的記憶體空間,這段空間作業系統是不會主動幫你釋放的,需要程式設計師自己,也就是這段記憶體的使用者來進行釋放,這就涉及到第二個問題了。

第二個問題:free函式和malloc是相對應的,說是釋放記憶體,其實本質上的意思是交出這塊記憶體的使用權,重新將其還給作業系統。試想一下,如果總malloc,但不釋放free的話,記憶體總將會沒有的。

4樓:網友

malloc是分配堆記憶體,可以動態分配記憶體,如果只分配,不釋放,記憶體遲早會用光!樓主這種想法不對呀!

5樓:匿名使用者

是給函式分配空間好不,與電腦記憶體無關,比如你要使用陣列,是不是要初始化陣列??乙個道理,然後free就是函式呼叫完或者執行完釋放空間,能夠不佔用記憶體空間而已!!!

二級c中malloc函式和calloc函式的區別

6樓:文件類共創空間

函式malloc()和calloc()都可以用來動態分配記憶體空間,但兩者稍有區別。

malloc()函式有乙個引數,即要分配的記憶體空間的大小:

void *malloc(size_t size);

calloc()函式有兩個引數,分別為元素的數目和每個元素的大小,這兩個引數的乘積就是要分配的記憶體空間的大小。

void *calloc(size_t numelements, size_t sizeof (element));

如果呼叫成功,函式malloc()和函式calloc()都將返回所分配的記憶體空間的首位址。

函式malloc()和函式calloc()的主要區別是前者不能初始化所分配的記憶體空間,而後者能。

如果由malloc()函式分配的記憶體空間原來沒有被使用過,則其中的每一位可能都是0;反之,如果這部分記憶體曾經被分配過,則其中可能遺留有各種各樣的資料。也就是說,使用malloc()函式的程式開始時(記憶體空間還沒有被重新分配)能正常進行,但經過一段時間(記憶體空間還已經被重新分配)可能會出現問題。

函式calloc()會將所分配的記憶體空間中的每一位都初始化為零,也就是說,如果你是為字元型別或整數型別的元素分配記憶體,那麼這些元素將保證會被初始化為0;如果你是為指標型別的元素分配記憶體,那麼這些元素通常會被初始化為空指標;如果你為實型資料分配記憶體,則這些元素會被初始化為浮點型的零。

7樓:網友

malloc是一次分配位址,calloc是經過malloc分配位址不夠用了,再在malloc已經分配的位址空間的基礎上追加引數那麼大的位址~~~

8樓:網友

calloc分配好記憶體空間之後,返回指向該空間的指標,但是此時無法操作這塊記憶體,如果要操作這塊記憶體,必須要將記憶體初始化成某種格式,就好象做工廠批量生產東西需要乙個模型,原理一樣。

malloc和calloc一樣,都需要強制轉換成你說的結構體型別。

區別:calloc在動態分配完記憶體後,自動初始化該記憶體空間為零,而malloc不初始化,裡邊資料是隨機的垃圾資料。

在c語言裡面宣告指標並用malloc賦值與與直接宣告變

區別當然是有的 link n 申明結構體實體 n 結構體地址 link n 申明結構體指標 n malloc sizeof link 讓結構體指標指向申請的記憶體空間,需要free釋放 後者需要釋放並且申請大小靈活 希望對你有幫助 首先你得明白malloc函式的作用 malloc函式是在記憶體中找到...

關於c語言非常簡單的問題,一個關於c語言非常簡單的問題

你if裡是逗號表示式,從左到右求值,但整個表示式的值只取最後一個,即只要a c即滿足if為true的條件。以下是逗號表示式的說明 c語言提供一種特殊的運算子,逗號運算子,優先順序別最低,它將兩式聯接起來,如 3 5,6 8 稱為逗號表示式,其求解過程先表示式1,後表示式2,整個表示式值是表示式2的值...

C語言關於一維陣列的應用問題,一個C語言關於一維陣列的應用問題。

include int main i,s for i 0 i 20 i count 9 count 10 注意100 10 10for i 0 i 10 i return 0 note your choice is c ide include stdio.h void main m 0 for i ...