自助建立网站,惠阳网站开发,阿里云建设网站流程,网站不备案做seo没用目录 第1题#xff1a; 第2题#xff1a; 第3题#xff1a; 第4题#xff1a; 第5题#xff1a; 在学习了关于动态开辟内存的相关知识后#xff0c;下面是一些涉及到动态开辟内存程序的试题及解析#xff08;试题部分来自《高质量的C/C编程》、笔试题#xff09;。 第1…
目录 第1题 第2题 第3题 第4题 第5题 在学习了关于动态开辟内存的相关知识后下面是一些涉及到动态开辟内存程序的试题及解析试题部分来自《高质量的C/C编程》、笔试题。 第1题
分析下面这段代码为什么运行错误 代码
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();return 0;
}解答分析
1.对NULL指针进行了解引用操作程序会崩溃
2.没有释放空间内存泄漏的问题
3.str为指针变量传递到函数中只是拷贝了一份也就是p形参p的改变不影响strp指向的malloc开辟的空间会在函数外被收回。 以下是改进后的程序 第2题
分析下面这段代码运行结果为什么是乱码 代码
char* GetMemory(void)
{char p[] hello world;return p;
}
void Test(void)
{char* str NULL;str GetMemory();printf(str);}
int main()
{Test();return 0;
}
解答分析 p被返回时p指向的空间同时因为出函数而被系统收回所以str被赋予野指针用printf打印str所指空间属于非法访问。 第3题
分析下面两段代码为什么结果大不相同 代码
int* test()
{int a 10;return a;
}
int main()
{int* ptest();printf(hehe);printf(%d\n, *p);return 0;
} 解答分析
从函数栈帧角度分析test开辟的函数栈帧收回后没有被系统及时利用就有可能被指针访问到之前的内容之后被printf重新利用后原有内容被覆盖。 第4题
下面这段程序有什么错误 代码
void GetMemory(char** p, int num)
{*p (char*)malloc(num);
}
void Test(void)
{char* str NULL;GetMemory(str, 100);strcpy(str, hello);printf(str);free(str);str NULL;
}
int main()
{Test();return 0;
} 解答分析 这段程序能够运行成功唯一错误的地方就是malloc在开辟内存空间后没有用free释放这段空间。容易造成内存泄漏。 用free正确释放malloc开辟的空间 第5题
为什么下面这段程序运行结果为乱码 代码
void Test(void)
{char* str (char*)malloc(100);strcpy(str, hello);free(str);str NULL;if (str ! NULL){strcpy(str, world);printf(str);}
}int main()
{Test();return 0;
}
解答分析
str所指的空间被free释放后空间交换给系统str变为野指针属于非法访问。
在free释放str所指向空间后应该及时strNULL置空且不能在访问。