幾個內存相關面試題(c/c++)

幾個內存相關面試題(c/c++)

void GetMemory(char *p)
{
p=(char*)malloc(100);
}

void Test(void)
{
char *str = NULL;
GetMemory(str);
strcpy(str,”helloworld”);
printf(str);
}
請問運行Test函數會有什麼樣的結果?
答:程序崩潰。因爲GetMemory並不能傳遞動態內存,Test函數中的str一直都是NULL。strcpy(str,”helloworld”);將使程序崩潰。

char *GetMemory(void)
{
char p[]=”helloworld”;
return p;
}
void Test(void)
{
char *str = NULL;
str = GetMemory();
printf(str);
}
請問運行Test函數會有什麼樣的結果?
答:可能是亂碼。因爲GetMemory返回的是指向“棧內存”的指針,該指針的地址不是NULL,但其原先的內容已經被清除,新內容不可知。

void GetMemory2(char **p, int num)
{
*p = (char*)malloc(num);
}
void Test(void)
{
char *str = NULL;
GetMemory(&str, 100);
strcpy(str, “hello”);
printf(str);
}
請問運行Test函數會有什麼樣的結果?
答:(1)能夠輸出hello(2)內存泄漏

以上都是關於內存的問題,我想問第一個爲什麼說GetMemory不能傳遞動態內存,而第三個 GetMemory2(char **p, int num)卻可以;還有第二個說GetMemory返回的是指向“棧內存”的指針,該指針的地址不是NULL,總之我不懂,最好懂得人能一句一句的解釋。

發佈了23 篇原創文章 · 獲贊 11 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章