首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > C/C++ > 看看你答对了吗
【标  题】:看看你答对了吗
【关键字】:
【来  源】:http://www.cublog.cn/u/24217/showart.php?id=198992

看看你答对了吗

1.
void GetMemory(char *p)
{
 p = (char *)malloc(100);
}
void Test(void)
{
char *str = NULL;
GetMemory(str);
strcpy(str, "hello world");
printf(str);
}
请问运行Test 函数会有什么样的结果?
2.
char *GetMemory(void)
{
char p[] = "hello world";
return p;
}
void Test(void)
{
char *str = NULL;
str = GetMemory();
printf(str);
}
请问运行Test 函数会有什么样的结果?
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 函数会有什么样的结果?
4.
void Test(void)
{
char *str = (char *) malloc(100);
strcpy(str, “hello”);
free(str);
if(str != NULL)
{
strcpy(str, “world”);
printf(str);
}
}
请问运行Test 函数会有什么样的结果?
 
 
 
 
 
答案:
1.答:程序崩溃。因为GetMemory 并不能传递动态内存,Test 函数中的 str 一直都是 NULL。
strcpy(str, "hello world");将使程序崩溃。
2.答:可能是乱码。因为GetMemory 返回的是指向“栈内存”的指针,该指针的地址不是 NULL,但其原
现的内容已经被清除,新内容不可知。
3.答:(1)能够输出hello(2)内存泄漏
4.答:篡改动态内存区的内容,后果难以预料,非常危险。因为free(str);之后,str 成为野指针,
if(str != NULL)语句不起作用。
lex 学习,清除c,c++风格注释内容:【上一篇】
在 Visual C++ 中以错误的顺序链接 CRT 库和 MFC 库时出现 LNK2005 错误:【下一篇】
【相关文章】
没有相关文章
【随机文章】
  • 用一搜火速查找Flash MV
  • C#中实现DataGrid双向排序
  • C语言打开目录并列出内容
  • 认识Worm.Novarg病毒最新变种(3)
  • 用Perl语言进行Socket编程
  • 用Visual Studio .NET自动化MS Word(翻译)
  • Web标准和ASP.NET - 第一部分 XHTML介绍
  • 学习笔记!
  • CRM的“产出”与“产能”(刘北林)
  • 感谢小偷~
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.