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

正文內(nèi)容

c內(nèi)存管理詳解(doc27)-經(jīng)營(yíng)管理(編輯修改稿)

2025-09-21 15:58 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 見(jiàn)示例 。 char *GetMemory3(int num) { char *p = (char *)malloc(sizeof(char) * num)。 return p。 } void Test3(void) { char *str = NULL。 中國(guó)最大的管理資料下載中心 (收集 \整理 . 部分版權(quán)歸原作者所有 ) str = GetMemory3(100)。 strcpy(str, hello)。 cout str endl。 free(str)。 } 示例 用函數(shù)返回值來(lái)傳遞動(dòng)態(tài)內(nèi)存 用函數(shù)返回值來(lái)傳遞動(dòng)態(tài)內(nèi)存這種方法雖然好用,但是常常有人把 return語(yǔ)句用錯(cuò)了。這里強(qiáng)調(diào)不要用 return 語(yǔ)句返回指向“棧內(nèi)存”的指針,因?yàn)樵搩?nèi)存在函數(shù)結(jié)束時(shí)自動(dòng)消亡,見(jiàn)示例 。 char *GetString(void) { char p[] = hello world。 return p。 // 編譯器將提出警告 } void Test4(void) { char *str = NULL。 中國(guó)最大的管理資料下載中心 (收集 \整理 . 部分版權(quán)歸原作者所有 ) str = GetString()。 // str 的內(nèi)容是垃圾 cout str endl。 } 示例 return 語(yǔ)句返回指向“棧內(nèi)存”的指針 用調(diào)試器逐步跟蹤 Test4,發(fā)現(xiàn)執(zhí)行 str = GetString 語(yǔ)句后 str不再是 NULL指針,但是 str 的內(nèi)容不是“ hello world”而是垃圾。 如果把示例 改寫成示例 ,會(huì)怎么樣? char *GetString2(void) { char *p = hello world。 return p。 } void Test5(void) { char *str = NULL。 str = GetString2()。 中國(guó)最大的管理資料下載中心 (收集 \整理 . 部分版權(quán)歸原作者所有 ) cout str endl。 } 示例 return 語(yǔ)句返回常量字符串 函數(shù) Test5 運(yùn)行雖然不會(huì)出錯(cuò),但是函數(shù) GetString2 的設(shè)計(jì)概念卻是錯(cuò)誤的。因?yàn)?GetString2 內(nèi)的“ hello world” 是常量字符串,位于靜態(tài)存儲(chǔ)區(qū),它在程序生命期內(nèi)恒定不變。無(wú)論什么時(shí)候調(diào)用 GetString2,它返回的始終是同一個(gè)“只讀”的內(nèi)存塊。 杜絕“野指針” “ 野指針”不是 NULL 指針,是指向“垃圾”內(nèi)存的指針。人們一般不 會(huì)錯(cuò)用 NULL 指針,因?yàn)橛?if 語(yǔ)句很容易判斷。但是“野指針”是很危險(xiǎn)的, if語(yǔ)句對(duì)它不起作用。 “ 野指針”的成因主要有兩種: ( 1)指針變量沒(méi)有被初始化。任何指針變量剛被創(chuàng)建時(shí)不會(huì)自動(dòng)成為NULL 指針,它的缺省值是隨機(jī)的,它會(huì)亂指一氣。所以,指針變量在創(chuàng)建的 中國(guó)最大的管理資料下載中心 (收集 \整理 . 部分版權(quán)歸原作者所有 ) 同時(shí)應(yīng)當(dāng)被初始化,要么將指針設(shè)置為 NULL,要么讓它指向合法的內(nèi)存。例如 char *p = NULL。 char *str = (char *) malloc(100)。 ( 2)指針 p 被 free 或者 delete 之后,沒(méi)有置為 NULL, 讓人誤以為 p是個(gè)合法的指針。 ( 3)指針操作超越了變量的作用范圍。這種情況讓人防不勝防,示例程序如下: class A { public: void Func(void){ cout “Func of class A” endl。 } }。 void Test(void) 中國(guó)最大的管理資料下載中心 (收集 \整理 . 部分版權(quán)歸原作者所有 ) { A *p。 { A a。 p = amp。a。 // 注意 a 的生命期 } pFunc()。 // p 是“野指針” } 函數(shù) Test 在執(zhí)行語(yǔ)句 pFunc()時(shí),對(duì)象 a 已經(jīng)消失,而 p 是指向 a的,所以 p 就成了“野指針”。但奇怪的是我運(yùn)行這個(gè)程序時(shí)居然沒(méi)有出錯(cuò),這可能與編譯器有關(guān)。 有了 malloc/free 為什么還要 new/delete? malloc 與 free是 C++/C語(yǔ)言的標(biāo)準(zhǔn)庫(kù)函數(shù), new/delete 是 C++的運(yùn)算符。它們都可用于申請(qǐng)動(dòng)態(tài)內(nèi)存和釋放內(nèi)存。 中國(guó)最大的管理資料下載中心 (收集 \整理 . 部分版權(quán)歸原作者所有 ) 對(duì)于非內(nèi)部數(shù)據(jù)類型的對(duì)象而言,光用 maloc/free 無(wú)法滿足動(dòng)態(tài)對(duì)象的要求。對(duì)象在創(chuàng)建的同時(shí)要自動(dòng)執(zhí)行構(gòu)造函數(shù),對(duì)象在消亡之前要自動(dòng)執(zhí)行析構(gòu)函數(shù)。由于 malloc/free 是庫(kù)函數(shù)而不是運(yùn)算符,不在編譯器控制權(quán)限之內(nèi),不能夠把執(zhí)行構(gòu)造函數(shù)和析構(gòu)函數(shù)的任務(wù)強(qiáng)加于 malloc/free。 因此 C++語(yǔ)言需要一個(gè)能完成動(dòng)態(tài)內(nèi)存分配和初始化工作的運(yùn)算符 new,以及一個(gè)能完成清理與釋放內(nèi)存工作的運(yùn)算符 delete。注意 new/delete 不是庫(kù)函數(shù)。我們先看一看 malloc/free 和 new/delete如何實(shí)現(xiàn)對(duì)象的動(dòng)態(tài)內(nèi)存管理,見(jiàn)示例 6。 class Obj { public : Obj(void){
點(diǎn)擊復(fù)制文檔內(nèi)容
畢業(yè)設(shè)計(jì)相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1