GetMemeory(char *p);GetMemeory(char **p);char* GetMemeory()用法!
生活随笔
收集整理的這篇文章主要介紹了
GetMemeory(char *p);GetMemeory(char **p);char* GetMemeory()用法!
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
void GetMemeory(char *p)
{p=(char*)malloc(100);?? ??? ??? ?
}void main()
{char *str=NULL;GetMemory(str);strcpy(str,"hello world");printf(str);
}
以上這段代碼運行會直接崩潰,雖然在函數內部分配了內存空間并把地址賦予指針p,但是函數調用結束時,系統會自動銷毀形參指針*p,所以函數調用后并沒有返回分配好的內存地址給指針str,str是沒有內存空間的,調用strcpy函數往一個空的內存空間寫內容,會導致程序崩潰,而且函數內申請的堆空間沒有手動釋放,容易造成內存泄露。
稍作改進的內存操作代碼:
在這段代碼中,獲得內存的是*p指向的變量,即str獲得了內存,p會在函數結束后銷毀,所以不會改變&str的值,所以不影響使用,但是使用后沒有對申請的內存做任何處理,因此可能導致內存泄露。
關于void* GetMemory()的討論,有如下代碼:
這段代碼顯示的是不確定的內容,因為在函數調用結束時,p會被銷毀,所以在常量區里的"hello world"內容會被銷毀,返回p的地址后,顯示的是不確定的內容。
?
總結
以上是生活随笔為你收集整理的GetMemeory(char *p);GetMemeory(char **p);char* GetMemeory()用法!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言中sizeof与strlen的区别
- 下一篇: 为什么在64位系统中指针的大小是8,而3