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