最近在看程式設計師面試寶典的書中遇到了傳遞動態記憶體的問題。
#include using namespace std;
void getmemory(char *p,int num)
void test(void)
int main()
書上的解釋是:在函式getmemory(char *p,int num)中,*p實際上是主函式中str的乙個副本,p申請了記憶體,只是把p指向的記憶體位址改變,而str並沒有改變,所以str依然沒有獲得記憶體,在執行字串複製時就會出錯。而且每次p申請的記憶體都不會得到釋放,最終會造成記憶體洩露。
不勝理解,查詢相關資料發現是值傳遞和位址傳遞的問題。
在c語言中函式引數的傳遞有:值傳遞,位址傳遞,引用傳遞這三種形式。
1、值傳遞:
形參是實參的拷貝,改變形參的值並不會影響外部實參的值。從被呼叫函式的角度來說,值傳遞是單向的(實參->形參),引數的值只能傳入,
不能傳出。當函式內部需要修改引數,並且不希望這個改變影響呼叫者時,採用值傳遞。
典型**:
#include using namespace std;
void swap(int p,int q)
void test(void)
void test(void)
void test(void)
{ char *str=null;
getmemory(&str,100);
strcpy(str,"hello");
//cout<
char *str=null;棧中操作的時候,記憶體為記憶體為0x28ff2c的位址儲存內容為null
記憶體分配方式有三種:
傳遞動態記憶體
當你涉及到c c 的核心程式設計的時候,你會無止境地與記憶體管理打交道.這些往往會使人受盡折磨.所以如果你想深入c c 程式設計,你必須靜下心來,好好苦一番.現在我們將討論c c 裡我認為哪一本書都沒有完全說清楚,也是涉及概念細節最多,語言中最難的技術之一的動態記憶體的傳遞.並且在軟體開發中很多專業...
傳遞動態記憶體
當你涉及到c c 的核心程式設計的時候,你會無止境地與記憶體管理打交道。這些往往會使人受盡折磨,所以如果你想深入c c 程式設計,你必須靜下心來好好苦一番。現在我們將討論c c 裡我認為哪一本書都沒有完全說清楚,也是涉及概念細節最多,語言中最難的技術之一的動態記憶體的傳遞。並且在軟體開發中很多專業人...
傳遞動態記憶體
當你涉及到c c 的核心程式設計的時候,你會無止境地與記憶體管理打交道.這些往往會使人受盡折磨.所以如果你想深入c c 程式設計,你必須靜下心來,好好苦一番.現在我們將討論c c 裡我認為哪一本書都沒有完全說清楚,也是涉及概念細節最多,語言中最難的技術之一的動態記憶體的傳遞.並且在軟體開發中很多專業...