(1)Cè¯è¨è·å
ååé
æ¹å¼
<1>ä»éæåå¨åºååé
.
å
åå¨ç¨åºç¼è¯çæ¶å就已ç»åé
好ï¼è¿åå
åå¨ç¨åºçæ´ä¸ªè¿è¡æé´é½åå¨.ä¾å¦å
¨å±åéãstaticåé.
<2>å¨æ ä¸å建
å¨æ§è¡å½æ°æ¶ï¼å½æ°å
å±é¨åéçåå¨åå
é½å¯ä»¥å¨æ ä¸å建ï¼å½æ°æ§è¡ç»ææ¶è¿äºåå¨åå
èªå¨è¢«éæ¾.æ å
ååé
è¿ç®å
ç½®äºå¤çå¨çæ令éä¸ï¼æçå¾é«ï¼ä½æ¯åé
çå
å容éæé.
<3>ä»å ä¸åé
ï¼äº¦ç§°å¨æå
ååé
.
ç¨åºå¨è¿è¡çæ¶åç¨mallocænewç³è¯·ä»»æå¤å°çå
åï¼ç¨åºåèªå·±è´è´£å¨ä½æ¶ç¨freeædeleteéæ¾å
å.å¨æå
åççåæç±ç¨æ·å³å®ï¼ä½¿ç¨é常çµæ´»ï¼ä½é®é¢ä¹æå¤.
(2)Cè¯è¨è·å
åç³è¯·ç¸å
³çå½æ°ä¸»è¦æ allocaãcallocãmallocãfreeãreallocç.
<1>allocaæ¯åæ ç³è¯·å
å,å æ¤æ ééæ¾.
<2>mallocåé
çå
åæ¯ä½äºå ä¸ç,并ä¸æ²¡æåå§åå
åçå
容,å æ¤åºæ¬ä¸mallocä¹å,è°ç¨å½æ°memsetæ¥åå§åè¿é¨åçå
å空é´.
<3>callocåå°åå§åè¿é¨åçå
å,设置为0.
<4>reallocå对mallocç³è¯·çå
åè¿è¡å¤§å°çè°æ´.
<5>ç³è¯·çå
åæç»éè¦éè¿å½æ°freeæ¥éæ¾.
å½ç¨åºè¿è¡è¿ç¨ä¸mallocäº,ä½æ¯æ²¡æfreeçè¯,ä¼é æå
åæ³æ¼.ä¸é¨åçå
å没æ被使ç¨,ä½æ¯ç±äºæ²¡æfree,å æ¤ç³»ç»è®¤ä¸ºè¿é¨åå
åè¿å¨ä½¿ç¨,é æä¸æçåç³»ç»ç³è¯·å
å,使å¾ç³»ç»å¯ç¨å
åä¸æåå°.ä½æ¯å
åæ³æ¼ä»
ä»
æç¨åºå¨è¿è¡æ¶,ç¨åºéåºæ¶,OSå°åæ¶ææçèµæº.å æ¤,éå½çéèµ·ä¸ä¸ç¨åº,ææ¶åè¿æ¯æç¹ä½ç¨.
ãattentionã
ä¸ä¸ªå½æ°çç³æåå«æ¯:
void* malloc(unsigned size);
void* realloc(void* ptr, unsigned newsize);
void* calloc(size_t numElements, size_t sizeOfElement);
é½å¨stdlib.hå½æ°åºå
ï¼å®ä»¬çè¿åå¼é½æ¯è¯·æ±ç³»ç»åé
çå°å,å¦æ请æ±å¤±è´¥å°±è¿åNULL.
(1)å½æ°malloc()
å¨å
åçå¨æåå¨åºä¸åé
ä¸åé¿åº¦ä¸ºsizeåèçè¿ç»åºåï¼åæ°size为éè¦å
å空é´çé¿åº¦ï¼è¿å该åºåçé¦å°å.
(2)å½æ°calloc()
ä¸mallocç¸ä¼¼,åæ°sizeOfElement为ç³è¯·å°åçåä½å
ç´ é¿åº¦,numElements为å
ç´ ä¸ªæ°ï¼å³å¨å
åä¸ç³è¯·numElements*sizeOfElementåè大å°çè¿ç»å°å空é´.
(3)å½æ°realloc()
ç»ä¸ä¸ªå·²ç»åé
äºå°åçæééæ°åé
空é´,åæ°ptr为åæç空é´å°å,newsizeæ¯éæ°ç³è¯·çå°åé¿åº¦.
åºå«:
(1)å½æ°mallocä¸è½åå§åæåé
çå
å空é´,èå½æ°callocè½.å¦æç±malloc()å½æ°åé
çå
å空é´åæ¥æ²¡æ被使ç¨è¿ï¼åå
¶ä¸çæ¯ä¸ä½å¯è½é½æ¯0;åä¹, å¦æè¿é¨åå
åæ¾ç»è¢«åé
è¿,åå
¶ä¸å¯è½éçæåç§åæ ·çæ°æ®.ä¹å°±æ¯è¯´ï¼ä½¿ç¨malloc()å½æ°çç¨åºå¼å§æ¶(å
å空é´è¿æ²¡æ被éæ°åé
)è½æ£å¸¸è¿è¡,ä½ç»è¿ä¸æ®µæ¶é´(å
å空é´è¿å·²ç»è¢«éæ°åé
)å¯è½ä¼åºç°é®é¢.
(2)å½æ°calloc() ä¼å°æåé
çå
å空é´ä¸çæ¯ä¸ä½é½åå§å为é¶,ä¹å°±æ¯è¯´,å¦æä½ æ¯ä¸ºå符类åææ´æ°ç±»åçå
ç´ åé
å
å,é£ä¹è¿äºå
ç´ å°ä¿è¯ä¼è¢«åå§å为0;å¦æä½ æ¯ä¸ºæéç±»åçå
ç´ åé
å
å,é£ä¹è¿äºå
ç´ é常ä¼è¢«åå§å为空æé;å¦æä½ ä¸ºå®åæ°æ®åé
å
å,åè¿äºå
ç´ ä¼è¢«åå§å为浮ç¹åçé¶.
(3)å½æ°mallocåç³»ç»ç³è¯·åé
æå®size个åèçå
å空é´.è¿åç±»åæ¯ void*ç±»å.void*表示æªç¡®å®ç±»åçæé.C,C++è§å®ï¼void* ç±»åå¯ä»¥å¼ºå¶è½¬æ¢ä¸ºä»»ä½å
¶å®ç±»åçæé.
(4)reallocå¯ä»¥å¯¹ç»å®çæéææç空é´è¿è¡æ©å¤§æè
缩å°ï¼æ 论æ¯æ©å¼ ææ¯ç¼©å°ï¼åæå
åçä¸å
容å°ä¿æä¸å.å½ç¶ï¼å¯¹äºç¼©å°ï¼å被缩å°çé£ä¸é¨åçå
容ä¼ä¸¢å¤±.realloc并ä¸ä¿è¯è°æ´åçå
å空é´ååæ¥çå
å空é´ä¿æåä¸å
åå°å.ç¸åï¼reallocè¿åçæéå¾å¯è½æåä¸ä¸ªæ°çå°å.
(5)reallocæ¯ä»å ä¸åé
å
åç.å½æ©å¤§ä¸åå
å空é´æ¶ï¼realloc()è¯å¾ç´æ¥ä»å ä¸ç°åçæ°æ®åé¢çé£äºåèä¸è·å¾éå çåèï¼å¦æè½å¤æ»¡è¶³ï¼èªç¶å¤©ä¸å¤ªå¹³ï¼å¦ææ°æ®åé¢çåèä¸å¤ï¼é®é¢å°±åºæ¥äºï¼é£ä¹å°±ä½¿ç¨å ä¸ç¬¬ä¸ä¸ªæ足å¤å¤§å°çèªç±åï¼ç°åçæ°æ®ç¶å就被æ·è´è³æ°çä½ç½®ï¼èèååæ¾åå°å ä¸.è¿å¥è¯ä¼ éçä¸ä¸ªéè¦çä¿¡æ¯å°±æ¯æ°æ®å¯è½è¢«ç§»å¨.
温馨提示:内容为网友见解,仅供参考