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

正文內(nèi)容

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

2025-09-28 16:03上一頁面

下一頁面
  

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