关于内存的4个经典题目GetMomery
来源:互联网 发布:美国二战知乎 编辑:程序博客网 时间:2024/05/16 02:34
摘自:http://bbs.yingjiesheng.com/thread-38664-1-1.html
关于内存的4个经典题目GetMomery
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");将使程序崩溃。
说的简单一些,就是传入的就是一个空指针,p确实分配空间了,
但是生成的空间首地址没有返回给str
2:
char *GetMemory(void)
{
char p[] = "hello world";
return p;
}
void Test(void)
{
char *str = NULL;
str = GetMemory();
printf(str);
}
请问运行Test函数会有什么样的结果?
答:可能是乱码。
因为GetMemory返回的是指向"栈内存"的指针,该指针的地址不是 NULL,但其原现的内容已经被清除,新内容不可知。
说的简单一些,就是函数的局部变量释放了。
3:
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)内存泄漏
说的简单一些,就是没有释放malloc的空间
4:
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)语句不起作用。
说的简单一些,就是只收回内存,没有用str=NULL收回指针
- 关于内存的4个经典题目GetMomery
- 50个经典的SQL面试题目
- 关于排列组合的经典面试题目
- 一个关于static的经典题目
- 经典的2个C语言面试题目
- 矩阵的是个经典题目--转自Matrix67:
- 8、 关于a 和 &a区别的经典题目
- 一道关于public,private,protected继承的经典题目
- 经典的一道题目.
- 一些经典的题目
- 经典的题目
- 位图的经典题目
- 经典的多线程题目
- 关于共享内存的一个题目(未完)
- Getmemory的几个经典的关于内存的笔试题
- 关于学习ASP的20个测试题目
- C几个经典的关于内存的笔试题
- 关于java内存泄漏的经典文章(一)
- Struts2 官方教程之Hello World Using Struts 2(四)
- ZTree+Struts2+ajax+json实现checkbox权限树
- Windows 8版本一览
- WinForm程序防止被调用
- 把Lua移植到stm32上,效果不错!
- 关于内存的4个经典题目GetMomery
- jbpm4.4入门编程小例子
- 读大学 究竟读什么? (关于应用程序apk的打包与发布到木蚂蚁市场上的问题)
- 同步IO与异步IO的区别
- 驱动如何实现对mdev的支持(自动创建一个设备)
- ubuntu下安装Apache+PHP+Mysql
- WinForm出现无法处理的异常解决
- request的用法
- 编译原理总结