freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

【能力素質(zhì)】c內(nèi)存管理詳解(完整版)

  

【正文】 是發(fā)現(xiàn)所有潛伏的地雷并且排除它們,躲是躲不了的。 內(nèi)存分配方式  內(nèi)存分配方式有三種: ?。?)從靜態(tài)存儲(chǔ)區(qū)域分配。動(dòng)態(tài)內(nèi)存的生存期由我們決定,使用非常靈活,但問(wèn)題也最多。如果指針p是函數(shù)的參數(shù),那么在函數(shù)的入口處用assert(p!=NULL)進(jìn)行  檢查。特別是在for循環(huán)語(yǔ)句中,循環(huán)次數(shù)很容易搞錯(cuò),導(dǎo)致數(shù)組操作越界。 ?。?)函數(shù)的return語(yǔ)句寫(xiě)錯(cuò)了,注意不要返回指向“棧內(nèi)存”的“指針”或者“引用”,因?yàn)樵搩?nèi)存在函數(shù)體結(jié)束時(shí)被自動(dòng)銷(xiāo)毀?!  疽?guī)則4】動(dòng)態(tài)內(nèi)存的申請(qǐng)與釋放必須配對(duì),防止內(nèi)存泄漏。   修改內(nèi)容  示例31中,字符數(shù)組a的容量是6個(gè)字符,其內(nèi)容為hello。 // 注意p指向常量字符串p[0] = ‘X’。要想復(fù)制a的內(nèi)容,可以先用庫(kù)函數(shù)malloc為p申請(qǐng)一塊容量為strlen(a)+1個(gè)字符的內(nèi)存,再用strcpy進(jìn)行字符串復(fù)制。strcpy(p,a)。 注意當(dāng)數(shù)組作為函數(shù)的參數(shù)進(jìn)行傳遞時(shí),該數(shù)組自動(dòng)退化為同類(lèi)型的指針。 // 4字節(jié)而不是100字節(jié)}    ?。╞) 數(shù)組退化為指針 // str 仍然為 NULL strcpy(str, hello)。事實(shí)上,每執(zhí)行一次GetMemory就會(huì)泄露一塊內(nèi)存,因?yàn)闆](méi)有用free釋放內(nèi)存。 cout str endl。}void Test3(void){ char *str = NULL。用調(diào)試器逐步跟蹤Test4,發(fā)現(xiàn)執(zhí)行str = GetString語(yǔ)句后str不再是NULL指針,但是str的內(nèi)容不是“hello world”而是垃圾?! 『瘮?shù)Test5運(yùn)行雖然不會(huì)出錯(cuò),但是函數(shù)GetString2的設(shè)計(jì)概念卻是錯(cuò)誤的。 “野指針”的成因主要有兩種: ?。?)指針變量沒(méi)有被初始化?! 。?)指針操作超越了變量的作用范圍。 // p是“野指針”}由于malloc/free是庫(kù)函數(shù)而不是運(yùn)算符,不在編譯器控制權(quán)限之內(nèi),不能夠把執(zhí)行構(gòu)造函數(shù)和析構(gòu)函數(shù)的任務(wù)強(qiáng)加于malloc/free。 }  void Destroy(void){ cout “Destroy” endl。 // 清除并且釋放內(nèi)存}     示例6 用malloc/free和new/delete如何實(shí)現(xiàn)對(duì)象的動(dòng)態(tài)內(nèi)存管理如果用delete釋放“malloc申請(qǐng)的動(dòng)態(tài)內(nèi)存”,理論上講程序不會(huì)出錯(cuò),但是該程序的可讀性很差。(1)判斷指針是否為NULL,如果是則馬上用return語(yǔ)句終止本函數(shù)。 } …} 如果發(fā)生“內(nèi)存耗盡”這樣的事情,一般說(shuō)來(lái)應(yīng)用程序已經(jīng)無(wú)藥可救。我只聽(tīng)到硬盤(pán)嘎吱嘎吱地響,Window 98已經(jīng)累得對(duì)鍵盤(pán)、鼠標(biāo)毫無(wú)反應(yīng)?!}  示例7試圖耗盡操作系統(tǒng)的內(nèi)存   * malloc返回值的類(lèi)型是void *,所以在調(diào)用malloc時(shí)要顯式地進(jìn)行類(lèi)型轉(zhuǎn)換,將void * 轉(zhuǎn)換成所需要的指針類(lèi)型。cout sizeof(long) endl。void free( void * memblock )。  Obj *b = new Obj(1)。例如delete []objects。(2)必須養(yǎng)成“使用調(diào)試器逐步跟蹤程序”的習(xí)慣,只有這樣才能發(fā)現(xiàn)問(wèn)題的本質(zhì)。 // 錯(cuò)誤的用法   后者相當(dāng)于delete objects[0],漏掉了另外99個(gè)對(duì)象?!elete b。對(duì)于非內(nèi)部數(shù)據(jù)類(lèi)型的對(duì)象而言,new在創(chuàng)建動(dòng)態(tài)對(duì)象的同時(shí)完成了初始化工作。  為什么free 函數(shù)不象malloc函數(shù)那樣復(fù)雜呢?這是因?yàn)橹羔榩的類(lèi)型以及它所指的內(nèi)存的容量事先都是知道的,語(yǔ)句free(p)能正確地釋放內(nèi)存。cout sizeof(float) endl。我們通常記不住int, float等數(shù)據(jù)類(lèi)型的變量的確切字節(jié)數(shù)。void * malloc(size_t size)。這下可把Unix和Windows程序員們樂(lè)壞了:反正錯(cuò)誤處理程序不起作用,我就不寫(xiě)了,省了很多麻煩。道理如同:如果不把歹徒擊斃,歹徒在老死之前會(huì)犯下更多的罪。(3)為new和malloc設(shè)置異常處理函數(shù)?!f(a == NULL) {  return。 內(nèi)存耗盡怎么辦?如果在申請(qǐng)動(dòng)態(tài)內(nèi)存時(shí)找不到足夠大的內(nèi)存塊,malloc和new將返回NULL指針,宣告內(nèi)存申請(qǐng)失敗。函數(shù)UseMallocFree中,由于 malloc/free不能執(zhí)行構(gòu)造函數(shù)與析構(gòu)函數(shù),必須調(diào)用成員函數(shù)Initialize和Destroy來(lái)完成初始化與清除工作。void UseMallocFree(void){ Obj *a = (obj *)malloc(sizeof(obj))。注意 ne
點(diǎn)擊復(fù)制文檔內(nèi)容
研究報(bào)告相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1