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