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