GetMemeory(char *p);GetMemeory(char **p);char* GetMemeory()用法!
以上這段代碼運(yùn)行會(huì)直接崩潰,雖然在函數(shù)內(nèi)部分配了內(nèi)存空間并把地址賦予指針p,但是函數(shù)調(diào)用結(jié)束時(shí),系統(tǒng)會(huì)自動(dòng)銷毀形參指針*p,所以函數(shù)調(diào)用后并沒(méi)有返回分配好的內(nèi)存地址給指針str,str是沒(méi)有內(nèi)存空間的,調(diào)用strcpy函數(shù)往一個(gè)空的內(nèi)存空間寫內(nèi)容,會(huì)導(dǎo)致程序崩潰,而且函數(shù)內(nèi)申請(qǐng)的堆空間沒(méi)有手動(dòng)釋放,容易造成內(nèi)存泄露。
稍作改進(jìn)的內(nèi)存操作代碼:
在這段代碼中,獲得內(nèi)存的是*p指向的變量,即str獲得了內(nèi)存,p會(huì)在函數(shù)結(jié)束后銷毀,所以不會(huì)改變&str的值,所以不影響使用,但是使用后沒(méi)有對(duì)申請(qǐng)的內(nèi)存做任何處理,因此可能導(dǎo)致內(nèi)存泄露。
關(guān)于void* GetMemory()的討論,有如下代碼:
這段代碼顯示的是不確定的內(nèi)容,因?yàn)樵诤瘮?shù)調(diào)用結(jié)束時(shí),p會(huì)被銷毀,所以在常量區(qū)里的"hello world"內(nèi)容會(huì)被銷毀,返回p的地址后,顯示的是不確定的內(nèi)容。
?
總結(jié)
以上是生活随笔為你收集整理的GetMemeory(char *p);GetMemeory(char **p);char* GetMemeory()用法!的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: C语言中sizeof与strlen的区别
- 下一篇: 为什么在64位系统中指针的大小是8,而3