一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

C語言內(nèi)存管理

 audrey_guowei 2009-08-12
內(nèi)存分配方式有三種:
1.從靜態(tài)存儲(chǔ)區(qū)域分配。在程序編譯的時(shí)候就分配好了內(nèi)存,這個(gè)內(nèi)存在程序的整個(gè)運(yùn)行期間都存在。
   例如 全局變量,static變量。
 
2.在棧上創(chuàng)建。在執(zhí)行函數(shù)時(shí),函數(shù)內(nèi)局部變量的存儲(chǔ)單元在棧上創(chuàng)建,函數(shù)執(zhí)行結(jié)束時(shí)這些存儲(chǔ)單元自動(dòng)被釋放。
   效率比較高,但是分配的內(nèi)存容量有限。
 
3.從堆上分配,即動(dòng)態(tài)內(nèi)存分配。用malloc或new申請(qǐng)任意多少的內(nèi)存。用free或delete釋放內(nèi)存。
 
常見的內(nèi)存錯(cuò)誤:
1.內(nèi)存分配未成功,卻使用了它。
    如果指針P是函數(shù)的參數(shù) 那么在函數(shù)的入口處用assert(p!=null)進(jìn)行檢查。
    如果用malloc或者new來申請(qǐng)內(nèi)存,用if(p==null) 或 if(p!=null)來進(jìn)行防錯(cuò)處理。
 
2.內(nèi)存分配成功,但是尚未初始化就引用它。
    無論以何種方式創(chuàng)建數(shù)組,被忘了賦初值。
      char *p = malloc(10);
      memset(p,'\0',10);
   
3.內(nèi)存分配成功并且已經(jīng)初始化,但是內(nèi)存越界了。
      char *ptr = (char *) malloc(10)
      char name[20]
      memcpy(name,ptr,20)
 
4.忘記了釋放內(nèi)存,造成內(nèi)存泄露。
 
5.釋放了內(nèi)存,卻還在使用它。
   a).返回的是“棧內(nèi)存”的指針,因?yàn)樵搩?nèi)存在函數(shù)體結(jié)束時(shí)被自動(dòng)銷毀。
   b).使用free或者delete釋放內(nèi)存后,沒有將指針設(shè)置為NULL,導(dǎo)致“野指針”。
 
 
錯(cuò)誤范例:
1.void GetMemmory(char *p)
   {
         p = (char *)malloc(100);
   }
   void Test(void)
   {
         char *str = NULL;         //申請(qǐng)一個(gè)char類型的指針str,并把str指向NULL(即str里存的是NULL的地址,*str為NULL中的值為0),
         GetMemmory(str);
         strcpy(str,"hello world");
         printf(str);
   }
 
2.char *GetMemory(void)
   {
         char p[] = "hello world" ;   //此行將p[]改成*p就對(duì)了,此時(shí)p[]存在于棧里邊,*p的話字符串存于常量區(qū)
         return p;                           //return數(shù)組名后,會(huì)釋放掉它里面所有的變量所占用的空間,所以數(shù)組空間被釋放掉了.
   }
   void Test(void)
    {
           char *str =NULL;
           str = GetMemory();
           printf(str); 
     }
 
3.void GetMemory2(char **p, int num)
   {
         *p = (char *)malloc(num);
   }
   void Test(void)
   {
         char *str = NULL;
         GetMemory(&str,100);
         strcpy(str,hello);
         printf(str);
    }
4.void Test(void)
   {
         char *str = (char *)malloc(100);
         strcpy(str,hello);
         free(str);
         if(str != NULL)            //一個(gè)指針被釋放之后其內(nèi)容并不是NULL,而是一個(gè)不確定的值
         { 
            strcpy(str,world);
            printf(str);
         }
   }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    99福利一区二区视频| 亚洲天堂精品一区二区| 内射精品欧美一区二区三区久久久| 中文字幕欧美视频二区| 亚洲国产av一二三区| 午夜福利精品视频视频| 亚洲欧洲在线一区二区三区 | 丰满人妻一二区二区三区av| 欧美黄色成人真人视频| 国产精品日本女优在线观看| 日韩欧美国产三级在线观看| 欧美日韩精品人妻二区三区| 欧美一区二区三区99| 亚洲精品伦理熟女国产一区二区| 欧美乱码精品一区二区三| 欧美黑人巨大一区二区三区| 果冻传媒在线观看免费高清| 亚洲在线观看福利视频| 91亚洲精品国产一区| 午夜资源在线观看免费高清| 美日韩一区二区精品系列| 国产精品内射婷婷一级二级| 大香蕉大香蕉手机在线视频| 翘臀少妇成人一区二区| 果冻传媒在线观看免费高清| 91精品视频免费播放| 人妻乱近亲奸中文字幕| 欧美一级内射一色桃子| 国产欧美日产中文一区| 中国一区二区三区人妻| 偷自拍亚洲欧美一区二页| 国产精品免费无遮挡不卡视频| 国产精品一区二区成人在线| 亚洲第一区二区三区女厕偷拍| 国产日韩欧美在线亚洲| 欧美成人一区二区三区在线| 中文字幕一二区在线观看| 日本不卡片一区二区三区| 国产精品免费视频视频| 国产成人国产精品国产三级| 日本午夜乱色视频在线观看|