C語言程序編寫涉及內存的問題

在日常的C語言程序編寫中每每都會涉及內存的問題,下面分享一些常見的問題範例及相關解答,能夠學習IT500強面試官談算法面試題面試

void GetMemory(char *p) 算法

{
p = (char *)malloc(100);
}
void Test(void)
{
char *str = NULL;
GetMemory(str);
strcpy(str, 「hello world」);
printf(str);
}
請問運行Test 函數會有什麼樣的結果?
答:程序崩潰。
由於GetMemory 並不能傳遞動態內存,Test 函數中的 str 一直都是 NULL。strcpy(str, 「hello world」);將使程序崩潰。
char *GetMemory(void)
{
char p[] = 「hello world」;
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)內存泄漏

void Test(void)
{
char *str = (char *) malloc(100);
strcpy(str, 「hello」);
free(str);
if(str != NULL)
{
strcpy(str, 「world」);
printf(str);
}
}
請問運行Test 函數會有什麼樣的結果?
答:篡改動態內存區的內容,後果難以預
料,很是危險。
由於free(str);以後,str 成爲野指針,
if(str != NULL)語句不起做用。
編程

學習更編程語言教程請登陸e良師益友網。 編程語言

相關文章
相關標籤/搜索