亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

C語言中的malloc使用詳解

2020-01-26 14:58:53
字體:
來源:轉載
供稿:網友

一、原型:extern void *malloc(unsigned int num_bytes);

頭文件:#include <malloc.h> 或 #include <alloc.h> (注意:alloc.h 與 malloc.h 的內容是完全一致的。)

功能:分配長度為num_bytes字節的內存塊

說明:如果分配成功則返回指向被分配內存的指針,否則返回空指針NULL。

當內存不再使用時,應使用free()函數將內存塊釋放。

舉例:

#include<stdio.h>#include<malloc.h>int main(){  char *p;   p=(char *)malloc(100);  if(p)    printf("Memory Allocated at: %x/n",p);  else    printf("Not Enough Memory!/n");  free(p);  return 0;}


二、函數聲明(函數原型):

  void *malloc(int size);

  說明:malloc 向系統申請分配指定size個字節的內存空間。返回類型是 void* 類型。void* 表示未確定類型的指針。C,C++規定,void* 類型可以強制轉換為任何其它類型的指針。這個在MSDN上可以找到相關的解釋,具體內容如下:   

malloc returns a void pointer to the allocated space, or NULL if there is insufficient memory available. To return a pointer to a type other than void, use a type cast on the return value. The storage space pointed to by the return value is guaranteed to be suitably aligned for storage of any type of object. If size is 0, malloc allocates a zero-length item in the heap and returns a valid pointer to that item. Always check the return from malloc, even if the amount of memory requested is small.

三、malloc與new的不同點

  從函數聲明上可以看出。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));

 

  第1、malloc 函數返回的是 void * 類型,如果你寫成:p = malloc (sizeof(int)); 則程序無法通過編譯,報錯:“不能將 void* 賦值給 int * 類型變量”。所以必須通過 (int *) 來將強制轉換。

  第2、函數的實參為 sizeof(int) ,用于指明一個整型數據需要的大小。如果你寫成:

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

  代碼也能通過編譯,但事實上只分配了1個字節大小的內存空間,當你往里頭存入一個整數,就會有3個字節無家可歸,而直接“住進鄰居家”!造成的結果是后面的內存中原有數據內容全部被清空。

  malloc 也可以達到 new [] 的效果,申請出一段連續的內存,方法無非是指定你所需要內存大小。

  比如想分配100個int類型的空間:

  int* p = (int *) malloc ( sizeof(int) * 100 ); //分配可以放得下100個整數的內存空間。

  另外有一點不能直接看出的區別是,malloc 只管分配內存,并不能對所得的內存進行初始化,所以得到的一片新內存中,其值將是隨機的。

  除了分配及最后釋放的方法不一樣以外,通過malloc或new得到指針,在其它操作上保持一致。


四、動態申請數組

申請一維數組
一維數組的數組名可以看成數組起始元素的首地址,因此我定義一個int *arr的指針,分配n個大小的int型空間,寫法如下:

   

#include <stdio.h>   #include <stdlib.h>      int main(void)   {     int n, *arr;        while (scanf("%d", &n) != EOF) {       arr = (int *)malloc(sizeof(int) * n);     }        return 0;   } 


申請二維數組
二維數組的數組名是其所有一維數組的首地址,因為二維數組的數組名是指針的指針,因為我定義一個row行column列的二維數組,寫法如下:

 

  #include <stdio.h>   #include <stdlib.h>      int main(void)   {     int i, row, column, **arr;        while (scanf("%d %d", &row, &column) != EOF) {       arr = (int **)malloc(sizeof(int *) * row); // 分配所有行的首地址       for (i = 0; i < row; i ++) { // 按行分配每一列         arr[i] = (int *)malloc(sizeof(int) * column);         }          free(arr);     }        return 0;   } 


總結:

malloc()函數其實就在內存中找一片指定大小的空間,然后將這個空間的首地址范圍給一個指針變量,這里的指針變量可以是一個單獨的指針,也可以是一個數組的首地址,這要看malloc()函數中參數size的具體內容。我們這里malloc分配的內存空間在邏輯上連續的,而在物理上可以連續也可以不連續。對于我們程序員來說,我們關注的是邏輯上的連續,因為操作系統會幫我們安排內存分配,所以我們使用起來就可以當做是連續的。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文日韩在线视频| 精品国产一区二区三区久久久| 亚洲欧美一区二区三区情侣bbw| 国产精品久久久久久久9999| 成人www视频在线观看| 欧美电影在线观看完整版| 亚洲国产成人精品一区二区| 欧美自拍视频在线观看| 欧美精品aaa| 成人激情视频在线观看| 91久久精品美女高潮| 久久久久久网站| 欧美日韩中文字幕日韩欧美| 欧美视频在线观看 亚洲欧| 狠狠色狠狠色综合日日小说| 国产噜噜噜噜久久久久久久久| 色与欲影视天天看综合网| 性日韩欧美在线视频| 日韩电影中文字幕| 亚洲xxxx在线| 亚洲免费av网址| 国产一区香蕉久久| 亚洲视频在线免费看| 久久视频在线视频| 亚洲性xxxx| 久热国产精品视频| 亚洲美女在线观看| 久久精品影视伊人网| 久久久精品一区| 国产精品精品视频一区二区三区| 久久久久久久久亚洲| 色偷偷偷亚洲综合网另类| 久久亚洲精品一区| 欧美日韩精品国产| 国产在线视频欧美| 亚洲欧美日韩精品久久亚洲区| 日韩亚洲精品视频| 日韩成人网免费视频| 少妇高潮久久77777| 亚洲www在线| 久久精品在线播放| 亚洲免费视频观看| 亚洲激情国产精品| 欧美日韩国产精品| 国产精品户外野外| 久久久国产精品一区| 欧美精品videosex牲欧美| 最新日韩中文字幕| 亚洲欧洲一区二区三区在线观看| 国产精品久久久久久久午夜| 久久激情视频免费观看| www日韩中文字幕在线看| 久久成人一区二区| 国产精品一区二区久久久久| 国产一区av在线| 欧美限制级电影在线观看| 久久精品国产69国产精品亚洲| 精品国产乱码久久久久久虫虫漫画| 96pao国产成视频永久免费| 亚洲欧洲一区二区三区久久| 精品国产乱码久久久久酒店| 成人免费视频网| 日韩精品一二三四区| 国产精品丝袜高跟| 久热精品视频在线观看一区| 国产在线拍偷自揄拍精品| 亚洲人成电影网| 久久久久国产视频| 亚洲护士老师的毛茸茸最新章节| 欧美激情在线观看视频| 国产成人精品av在线| 国产主播喷水一区二区| 国产成人aa精品一区在线播放| 51视频国产精品一区二区| 久久久久久com| 这里精品视频免费| 日本aⅴ大伊香蕉精品视频| 久久久欧美一区二区| 欧美一区二区色| 欧美一级视频一区二区| 在线看国产精品| 日韩在线观看免费网站| 亚洲国产又黄又爽女人高潮的| 日韩电影免费在线观看| 久久精品成人一区二区三区| 日韩av片电影专区| 国产精品成人免费电影| 91大神福利视频在线| 国产在线高清精品| 国产精品久久久久久久久久免费| 亚洲色图狂野欧美| 久久国产精品99国产精| 欧美日韩在线另类| 成人自拍性视频| 国产激情999| 久久精品国产99国产精品澳门| 亚洲图片在区色| 日韩高清电影免费观看完整| 日韩美女视频在线观看| 在线观看国产精品日韩av| 亚洲专区在线视频| 亚洲第一精品夜夜躁人人爽| 国产精品人人做人人爽| 亚洲国产又黄又爽女人高潮的| 亚洲精品美女在线| 日本亚洲精品在线观看| 欧美另类交人妖| 国产精品黄色av| 日韩av一区在线观看| 国产精品白丝av嫩草影院| 精品自拍视频在线观看| 亚洲天堂男人天堂| 成人网在线免费看| 国产精品老牛影院在线观看| 成人免费高清完整版在线观看| 91精品国产91久久久| 久久亚洲国产精品| 国内外成人免费激情在线视频| 日韩av电影院| 97久久精品人搡人人玩| 亚洲成人免费网站| 欧美诱惑福利视频| 欧美日韩国产成人高清视频| 久久精品国产v日韩v亚洲| 久久久久久久一区二区| 亚洲成在人线av| yellow中文字幕久久| 91经典在线视频| 在线观看国产精品日韩av| 久久视频在线观看免费| 在线播放国产一区二区三区| 亚洲精品福利在线观看| 国产精品高潮呻吟久久av无限| 久久精品夜夜夜夜夜久久| 精品久久香蕉国产线看观看亚洲| 91热福利电影| 精品色蜜蜜精品视频在线观看| 日韩精品在线第一页| 久久av在线看| 欧美亚洲国产成人精品| 中文字幕日韩视频| 国产精品福利无圣光在线一区| 日日骚av一区| 亚洲久久久久久久久久| 欧美性生交大片免网| 精品国产鲁一鲁一区二区张丽| 成人啪啪免费看| 欧美成人免费在线视频| 亚洲精品欧美日韩专区| 亚洲国内精品在线| 岛国视频午夜一区免费在线观看| 亚洲伦理中文字幕| 欧洲日韩成人av| 国产一区二中文字幕在线看| 久久理论片午夜琪琪电影网| 亚洲成年网站在线观看| 亚洲黄页网在线观看| 欧美另类xxx| 欧美激情视频三区| 91久久综合亚洲鲁鲁五月天| 国产精品亚洲аv天堂网| 久久久久久久久亚洲| 日韩在线观看免费网站| 国产精品wwwwww|