1. malloc()å½æ°
1.1 mallocçå
¨ç§°æ¯memory allocationï¼ä¸æå«å¨æå
ååé
ã
ååï¼extern void *malloc(unsigned int num_bytes);
说æï¼åé
é¿åº¦ä¸ºnum_bytesåèçå
ååãå¦æåé
æååè¿åæå被åé
å
åçæéï¼åé
失败è¿å空æéNULLãå½å
åä¸å使ç¨æ¶ï¼åºä½¿ç¨free()å½æ°å°å
ååéæ¾ã
1.2 void *malloc(int size);
说æï¼malloc åç³»ç»ç³è¯·åé
æå®size个åèçå
å空é´ï¼è¿åç±»åæ¯ void* ç±»åãvoid* 表示æªç¡®å®ç±»åçæéãC,C++è§å®ï¼void* ç±»åå¯ä»¥å¼ºå¶è½¬æ¢ä¸ºä»»ä½å
¶å®ç±»åçæéã ãã
å¤æ³¨ï¼void* 表示æªç¡®å®ç±»åçæéï¼æ´æç¡®ç说æ¯æç³è¯·å
å空é´æ¶è¿ä¸ç¥éç¨æ·æ¯ç¨è¿æ®µç©ºé´æ¥åå¨ä»ä¹ç±»åçæ°æ®ï¼æ¯å¦æ¯charè¿æ¯intæè
...ï¼
1.3 free
void free(void *FirstByte)ï¼ è¯¥å½æ°æ¯å°ä¹åç¨mallocåé
ç空é´è¿ç»ç¨åºæè
æ¯æä½ç³»ç»ï¼ä¹å°±æ¯éæ¾äºè¿åå
åï¼è®©å®éæ°å¾å°èªç±ã
1.4注æäºé¡¹
1ï¼ç³è¯·äºå
å空é´åï¼å¿
é¡»æ£æ¥æ¯å¦åé
æåã
2ï¼å½ä¸éè¦å使ç¨ç³è¯·çå
åæ¶ï¼è®°å¾éæ¾ï¼éæ¾ååºè¯¥ææåè¿åå
åçæéæåNULLï¼é²æ¢ç¨åºåé¢ä¸å°å¿ä½¿ç¨äºå®ã
3ï¼è¿ä¸¤ä¸ªå½æ°åºè¯¥æ¯é
对ãå¦æç³è¯·åä¸éæ¾å°±æ¯å
åæ³é²ï¼å¦ææ æ
éæ¾é£å°±æ¯ä»ä¹ä¹æ²¡æåãéæ¾åªè½ä¸æ¬¡ï¼å¦æéæ¾ä¸¤æ¬¡å两次以ä¸ä¼åºç°é误ï¼éæ¾ç©ºæéä¾å¤ï¼éæ¾ç©ºæéå
¶å®ä¹çäºå¥ä¹æ²¡åï¼æ以éæ¾ç©ºæééæ¾å¤å°æ¬¡é½æ²¡æé®é¢ï¼ã
4ï¼è½ç¶malloc()å½æ°çç±»åæ¯(void *),ä»»ä½ç±»åçæéé½å¯ä»¥è½¬æ¢æ(void *),ä½æ¯æ好è¿æ¯å¨åé¢è¿è¡å¼ºå¶ç±»å转æ¢ï¼å 为è¿æ ·å¯ä»¥èº²è¿ä¸äºç¼è¯å¨çæ£æ¥ã
1.5 malloc()å°åºä»åªéå¾å°äºå
å空é´ï¼
çæ¡æ¯ä»å éé¢è·å¾ç©ºé´ãä¹å°±æ¯è¯´å½æ°è¿åçæéæ¯æåå éé¢çä¸åå
åãæä½ç³»ç»ä¸æä¸ä¸ªè®°å½ç©ºé²å
åå°åçé¾è¡¨ãå½æä½ç³»ç»æ¶å°ç¨åºçç³è¯·æ¶ï¼å°±ä¼éå该é¾è¡¨ï¼ç¶å就寻æ¾ç¬¬ä¸ä¸ªç©ºé´å¤§äºæç³è¯·ç©ºé´çå ç»ç¹ï¼ç¶åå°±å°è¯¥ç»ç¹ä»ç©ºé²ç»ç¹é¾è¡¨ä¸å é¤ï¼å¹¶å°è¯¥ç»ç¹ç空é´åé
ç»ç¨åºã
2. newè¿ç®ç¬¦
2.1 C++ä¸ï¼ç¨newådeleteå¨æå建åéæ¾æ°ç»æå个对象ã
å¨æå建对象æ¶ï¼åªéæå®å
¶æ°æ®ç±»åï¼èä¸å¿
为该对象å½åï¼new表达å¼è¿åæå该æ°å建对象çæéï¼æ们å¯ä»¥éè¿æéæ¥è®¿é®æ¤å¯¹è±¡ã
int *pi=new int;
è¿ä¸ªnew表达å¼å¨å åºä¸åé
å建äºä¸ä¸ªæ´å对象ï¼å¹¶è¿åæ¤å¯¹è±¡çå°åï¼å¹¶ç¨è¯¥å°ååå§åæépi ã
2.2 å¨æå建对象çåå§å
å¨æå建ç对象å¯ä»¥ç¨åå§ååéçæ¹å¼åå§åã
int *pi=new int(100); //æépiææåç对象åå§å为100
string *ps=new string(10,'9');//*ps 为â9999999999â
å¦æä¸æä¾æ¾ç¤ºåå§åï¼å¯¹äºç±»ç±»åï¼ç¨è¯¥ç±»çé»è®¤æé å½æ°åå§åï¼èå
置类åç对象åæ åå§åã
ä¹å¯ä»¥å¯¹å¨æå建ç对象åå¼åå§åï¼
int *pi=new int( );//åå§å为0
int *pi=new int;//pi æåä¸ä¸ªæ²¡æåå§åçint
string *ps=new string( );//åå§å为空å符串 ï¼å¯¹äºæä¾äºé»è®¤æé å½æ°ç类类åï¼æ²¡æå¿
è¦å¯¹å
¶å¯¹è±¡è¿è¡å¼åå§åï¼
2.3 æ¤éå¨æå建ç对象
delete表达å¼éæ¾æéæåçå°å空é´ã
delete pi ;// éæ¾å个对象
delete [ ]pi;//éæ¾æ°ç»
å¦ææéæåçä¸æ¯newåé
çå
åå°åï¼å使ç¨deleteæ¯ä¸åæ³çã
2.4 å¨deleteä¹åï¼é设æéçå¼
delete p; //æ§è¡å®è¯¥è¯å¥åï¼påæäºä¸ç¡®å®çæéï¼å¨å¾å¤æºå¨ä¸ï¼å°½ç®¡på¼æ²¡ææç¡®å®ä¹ï¼ä½ä»ç¶åæ¾äºå®ä¹åææ对象çå°åï¼ç¶åpææåçå
åå·²ç»è¢«éæ¾äºï¼æ以pä¸åææãæ¤æ¶ï¼è¯¥æéåæäºæ¬åæéï¼æ¬åæéæåæ¾ç»åæ¾å¯¹è±¡çå
åï¼ä½è¯¥å¯¹è±¡å·²ç»ä¸åå¨äºï¼ãæ¬åæéå¾å¾å¯¼è´ç¨åºé误ï¼èä¸å¾é¾æ£æµåºæ¥ã
ä¸æ¦å é¤äºæéææç对象ï¼ç«å³å°æé置为0ï¼è¿æ ·å°±é常æ¸
æ¥çæææéä¸åæåä»»ä½å¯¹è±¡ãï¼é¶å¼æéï¼int *ip=0;ï¼
2.5 åºåé¶å¼æéåNULLæé
é¶å¼æéï¼æ¯å¼æ¯0çæéï¼å¯ä»¥æ¯ä»»ä½ä¸ç§æéç±»åï¼å¯ä»¥æ¯éç¨åä½ç±»åvoid*ä¹å¯ä»¥æ¯char*ï¼int*ççã
空æéï¼å
¶å®ç©ºæéåªæ¯ä¸ç§ç¼ç¨æ¦å¿µï¼å°±å¦ä¸ä¸ªå®¹å¨å¯è½æ空åé空两ç§åºæ¬ç¶æï¼èå¨é空æ¶å¯è½éé¢åå¨äºä¸ä¸ªæ°å¼æ¯0ï¼å æ¤ç©ºæéæ¯äººä¸ºè®¤ä¸ºçæéä¸æä¾ä»»ä½å°å讯æ¯ã
2.6 newåé
失败æ¶ï¼è¿åä»ä¹ï¼
1993å¹´åï¼c++ä¸ç´è¦æ±å¨å
ååé
失败æ¶operator newè¦è¿å0ï¼ç°å¨åæ¯è¦æ±operator newæåºstd::bad_allocå¼å¸¸ãå¾å¤c++ç¨åºæ¯å¨ç¼è¯å¨å¼å§æ¯ææ°è§èååçãc++æ åå§åä¼ä¸æ³æ¾å¼é£äºå·²æçéµå¾ªè¿å0è§èç代ç ï¼æ以ä»ä»¬æä¾äºå¦å¤å½¢å¼çoperator new(以åoperator new[])以继ç»æä¾è¿å0åè½ãè¿äºå½¢å¼è¢«ç§°ä¸ºâæ æåºâï¼å 为ä»ä»¬æ²¡ç¨è¿ä¸ä¸ªthrowï¼èæ¯å¨ä½¿ç¨newçå
¥å£ç¹éç¨äºnothrow对象:
class widget { ... };
widget *pw1 = new widget;// åé
失败æåºstd::bad_alloc
if (pw1 == 0) ... // è¿ä¸ªæ£æ¥ä¸å®å¤±è´¥
widget *pw2 = new (nothrow) widget; // è¥åé
失败è¿å0
if (pw2 == 0) ... // è¿ä¸ªæ£æ¥å¯è½ä¼æå
3. mallocånewçåºå«
3.1 new è¿åæå®ç±»åçæéï¼å¹¶ä¸å¯ä»¥èªå¨è®¡ç®æéè¦å¤§å°ã
æ¯å¦ï¼ ãã
1) int *p; ãã
p = new int; //è¿åç±»å为int* ç±»å(æ´æ°åæé)ï¼åé
大å°ä¸º sizeof(int); ãã
æï¼ ãã
int* parr; ãã
parr = new int [100]; //è¿åç±»å为 int* ç±»å(æ´æ°åæé)ï¼åé
大å°ä¸º sizeof(int) * 100; ãã
2) è malloc åå¿
é¡»è¦ç±æ们计ç®åèæ°ï¼å¹¶ä¸å¨è¿åå强è¡è½¬æ¢ä¸ºå®é
ç±»åçæéã ãã
int* p; ãã
p = (int *) malloc (sizeof(int)*128);//åé
128个ï¼å¯æ ¹æ®å®é
éè¦æ¿æ¢è¯¥æ°å¼ï¼æ´ååå¨åå
ï¼å¹¶å°è¿128个è¿ç»çæ´ååå¨åå
çé¦å°ååå¨å°æéåépä¸
double *pd=(double *) malloc (sizeof(double)*12);//åé
12个doubleååå¨åå
ï¼å¹¶å°é¦å°ååå¨å°æéåépdä¸
3.2 malloc åªç®¡åé
å
åï¼å¹¶ä¸è½å¯¹æå¾çå
åè¿è¡åå§åï¼æ以å¾å°çä¸çæ°å
åä¸ï¼å
¶å¼å°æ¯éæºçã
é¤äºåé
åæåéæ¾çæ¹æ³ä¸ä¸æ ·ä»¥å¤ï¼éè¿mallocænewå¾å°æéï¼å¨å
¶å®æä½ä¸ä¿æä¸è´ã
4.æäºmalloc/free为ä»ä¹è¿è¦new/deleteï¼
1) mallocä¸freeæ¯C++/Cè¯è¨çæ ååºå½æ°ï¼new/deleteæ¯C++çè¿ç®ç¬¦ãå®ä»¬é½å¯ç¨äºç³è¯·å¨æå
ååéæ¾å
åã
2) 对äºéå
é¨æ°æ®ç±»åç对象èè¨ï¼å
ç¨maloc/freeæ æ³æ»¡è¶³å¨æ对象çè¦æ±ã对象å¨å建çåæ¶è¦èªå¨æ§è¡æé å½æ°ï¼å¯¹è±¡å¨æ¶äº¡ä¹åè¦èªå¨æ§è¡ææå½æ°ãç±äºmalloc/freeæ¯åºå½æ°èä¸æ¯è¿ç®ç¬¦ï¼ä¸å¨ç¼è¯å¨æ§å¶æéä¹å
ï¼ä¸è½å¤ææ§è¡æé å½æ°åææå½æ°çä»»å¡å¼ºå äºmalloc/freeã
å æ¤C++è¯è¨éè¦ä¸ä¸ªè½å®æå¨æå
ååé
ååå§åå·¥ä½çè¿ç®ç¬¦newï¼ä»¥åä¸ä¸ªè½å®ææ¸
çä¸éæ¾å
åå·¥ä½çè¿ç®ç¬¦deleteã注ænew/deleteä¸æ¯åºå½æ°ã
æ们ä¸è¦ä¼å¾ç¨malloc/freeæ¥å®æå¨æ对象çå
å管çï¼åºè¯¥ç¨new/deleteãç±äºå
é¨æ°æ®ç±»åçâ对象â没ææé ä¸ææçè¿ç¨ï¼å¯¹å®ä»¬èè¨malloc/freeånew/deleteæ¯çä»·çã
3) æ¢ç¶new/deleteçåè½å®å
¨è¦çäºmalloc/freeï¼ä¸ºä»ä¹C++ä¸æmalloc/freeæ·æ±°åºå±å¢ï¼è¿æ¯å 为C++ç¨åºç»å¸¸è¦è°ç¨Cå½æ°ï¼èCç¨åºåªè½ç¨malloc/free管çå¨æå
åã
å¦æç¨freeéæ¾ânewå建çå¨æ对象âï¼é£ä¹è¯¥å¯¹è±¡å æ æ³æ§è¡ææå½æ°èå¯è½å¯¼è´ç¨åºåºéãå¦æç¨deleteéæ¾âmallocç³è¯·çå¨æå
åâï¼ç»æä¹ä¼å¯¼è´ç¨åºåºéï¼ä½æ¯è¯¥ç¨åºçå¯è¯»æ§å¾å·®ãæ以new/deleteå¿
é¡»é
对使ç¨ï¼malloc/freeä¹ä¸æ ·ã
温馨提示:答案为网友推荐,仅供参考