C 關於記憶體的思考

2021-09-29 02:47:48 字數 925 閱讀 4078

對面試既愛又恨,每次面試都像是經歷了一次洗禮,緊張又興奮,大腦高速運轉,最重要的是每次都會發現自身的許多不

足,這樣才能不斷的提高自我。下面是面試遇到的乙個問題,還挺有意思的。

#include

void getmemory(char *p)

p = (char *)malloc(100);

void test(void)

char *str = null;

getmemory(str);

strcpy(str,"hello world");

printf(str);

int main()

test();

system("pause");

return 0;

輸出什麼?

思考一下不要急著向下翻哦。

解答:剛看到這道題的時候,很容易被誤導,

首先會覺得指標型別做引數,值被修改,其實際值也會變,     

那麼給函式引數指標分配記憶體呢?

其實相當於修改的是引數指標本身,函式釋放後指標實際的指向是不會變的。

所以這裡需要使用雙指標才可以實現想要的效果。

實際執行這段程式會在strcpy(str,"hello world");位置出現異常。

**需要修改如下:

#include

void getmemory(char **p)

*p = (char *)malloc(100);

void test(void)

char *str = null;

getmemory(&str);

strcpy(str,"hello world");

printf(str);

int main()

test();

system("pause");

return 0;

c c 關於記憶體的思考 一

1.void getmemory char p void test void 請問執行test函式會有什麼樣的結果?答 程式崩潰。因為getmemory並不能傳遞動態記憶體,test函式中的 str一直都是 null。strcpy str,hello world 將使程式崩潰。2.char getm...

C 記憶體分配思考

引用 楊麗慧 的 c 記憶體分配的五種方法 也不知道是不是她,當初我拷貝這篇文章時沒注意作者是誰,現在需要引用,特意找了一下,如果不對,請指正。正文 在c 中,記憶體分成5個區,他們分別是堆 棧 自由儲存區 全域性 靜態儲存區和常量儲存區。棧,就是那些由編譯器在需要的時候分配,在不需要的時候自動清楚...

關於C 多型的思考

c 中,可以如下定義 base father new derived father 是基類引用,指向子類物件,這一點有點類似c 該引用的使用模式如下 先說結論 測試 如下 using logging class base public virtual void show2 public void m...