c語言動態申請內存(malloc與calloc)


malloc與calloc

1.函數原型

   #include<stdlib.h>

   void *malloc(unsigned int size);     //申請size字節的內存

   void *calloc(unsigned int num, unsigned size);    //申請num*size字節的內存

2.函數的返回值為void*類型,使用時需強制轉換為所需要的類型;

   如果內存申請失敗,則返回NULL,所以使用申請到的內存時需要先進行判斷。

   如:char* p = (char*)malloc(6 * sizeof(char));

3.申請的內存位於堆中,不再需要使用時,需調用free函數釋放

   void free(void *p);

注意:

1.void *與NULL是完全不同的兩個概念

  int *p=NULL;

  void *p;

2.malloc與數組的比較:

(1)傳給malloc函數的實參可以是一個表達式,從而可以“動態”申請一塊內存;

(2)使用malloc函數申請的內存可以從函數中返回;而使用數組則不可以(存放在棧中,當函數返回時,棧內存已經被釋放),示例代碼如下:

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 int main()
 4 {
 5     char* func1();
 6     char* func2();
 7     char* pf1;
 8     char* pf2;
 9     pf1 = func1();
10     pf2 = func2();
11     printf("%s\n", pf1);    //輸出f1
12     printf("%s\n", pf2);    //輸出亂碼,錯誤信息-返回局部變量的地址
13 }
14 
15 char* func1()
16 {
17     char* p = (char*)malloc(3 * sizeof(char));
18     if (p)
19     {
20         p[0] = 'f';
21         p[1] = '1';
22         p[2] = '\0';
23         return p;
24     }
25     return NULL;
26 }
27 
28 char* func2()
29 {
30     char p[3] = "f2";
31     return p;
32 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM