1、如果函數(shù)的參數(shù)是一個(gè)指針,不要用該指針去申請(qǐng)動(dòng)態(tài)內(nèi)存
上面的代碼在編譯無錯(cuò)誤的,可是在執(zhí)行時(shí),出現(xiàn)了錯(cuò)誤。調(diào)試發(fā)現(xiàn),str仍然為NULL。str并沒有指向GetMemory()所申請(qǐng)的內(nèi)存,在函數(shù)被調(diào)用時(shí),編譯器會(huì)被調(diào)用函數(shù)的參數(shù)產(chǎn)生一個(gè)副本_p,使_p=p,如果函數(shù)體內(nèi)修改_p的內(nèi)容,那么導(dǎo)致參數(shù)p的內(nèi)容作相應(yīng)的修改,這就是指針可以作為輸出參數(shù)的原因。在本例中,_p重新申請(qǐng)了一塊內(nèi)存,只是把_p所指的內(nèi)存地址改變了,但是p絲毫未變。所以GetMemory并不能返回任何東西。所以str仍然為NULL,導(dǎo)致程序運(yùn)行錯(cuò)誤。事實(shí)上,每執(zhí)行一次GetMemory(),就會(huì)造成內(nèi)存的泄露,因?yàn)樯暾?qǐng)的內(nèi)存并沒有被釋放。 如果要用指針參數(shù)申請(qǐng)內(nèi)存,使用指向指針的指針可以完成此功能:
2、函數(shù)返回值傳遞動(dòng)態(tài)內(nèi)存
Copyright @ 煙皚 Powered by: .Text and ASP.NET Theme by: .NET Monster