road420
导航
C++博客
首页
新随笔
联系
聚合
管理
<
2007年7月
>
日
一
二
三
四
五
六
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
统计
随笔 - 50
文章 - 1
评论 - 5
引用 - 0
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(2)
给我留言
查看公开留言
查看私人留言
随笔档案
2013年4月 (1)
2010年9月 (6)
2010年8月 (1)
2009年11月 (1)
2009年10月 (5)
2008年10月 (2)
2008年9月 (7)
2008年8月 (3)
2008年7月 (7)
2008年1月 (1)
2007年11月 (1)
2007年7月 (5)
2006年10月 (5)
2006年9月 (2)
2006年5月 (3)
文章档案
2008年3月 (1)
搜索
最新评论
1. re: 输出程序注释行
没看懂什么意思
--岁月漫步
2. re: 关于sizeof()
这个好牛逼啊
--岁月漫步
3. re: 程序的内存分配
很好,谢谢
--岁月漫步
4. re: 转载(不要一辈子靠技术生存)[未登录]
中国也正是因为有太多你这种人,才不会出现Bill gates...
--TOTO
5. re: 回调函数
除了入口指针之外,还要提及分派调度方式把,例如ice里面的诸塞、异步等等方式。
回调在分布式系统体系里面应用很广
--放屁啊狗
阅读排行榜
1. windbg调试器(2039)
2. DLL 线程本地存储(1005)
3. vs2005 调试(836)
4. CString(575)
5. 悬挂指针(545)
评论排行榜
1. 输出程序注释行(1)
2. 关于sizeof()(1)
3. 回调函数(1)
4. 程序的内存分配(1)
5. 转载(不要一辈子靠技术生存)(1)
指针
指针高级--<高质量编程>
//
execise2.cpp : Defines the entry point for the console application.
//
#include
"
stdafx.h
"
#include
<
iostream
>
using
namespace
std;
//
-----------------------------------------------
void
GetMemory1(
char
*
p)
{
p
=
(
char
*
)malloc(
100
);
}
void
Test1(
void
)
{
char
*
str
=
NULL;
GetMemory1( str );
strcpy(str,
"
hello world
"
);
printf(str);
}
//
-----------------------------------------------
char
*
GetMemory2(
void
)
{
char
p[]
=
"
hello world
"
;
return
p;
}
void
Test2(
void
)
{
char
*
str
=
NULL;
str
=
GetMemory2();
printf(str);
}
//
-----------------------------------------------
void
GetMemory3(
char
**
p,
int
num)
{
*
p
=
(
char
*
)malloc(num);
}
void
Test3(
void
)
{
char
*
str
=
NULL;
GetMemory3(
&
str,
100
);
strcpy(str,
"
hello
"
);
printf(str);
}
//
-----------------------------------------------
void
Test4(
void
)
{
char
*
str
=
(
char
*
) malloc(
100
);
strcpy(str,
"
hello
"
);
free(str);
if
(str
!=
NULL)
{
strcpy(str,
"
world
"
);
printf(str);
}
}
//
-----------------------------------------------
main()
{
//
-----------------------------------------------
//
请问运行Test1函数会有什么样的结果?
//
//
答:程序崩溃。
//
//
因为GetMemory并不能传递动态内存,
//
//
Test函数中的 str一直都是 NULL。
//
//
strcpy(str, "hello world");将使程序崩溃。
Test1();
//
-----------------------------------------------
//
请问运行Test2函数会有什么样的结果?
//
//
答:可能是乱码。
//
//
因为GetMemory返回的是指向“栈内存”的指针,
//
该指针的地址不是 NULL,但其原现的内容已经被清除,新内容不可知。
Test2();
//
-----------------------------------------------
//
请问运行Test3函数会有什么样的结果?
//
//
答:
//
//
(1)能够输出hello
//
//
(2)内存泄漏
Test3();
//
-----------------------------------------------
//
请问运行Test函数会有什么样的结果?
//
//
答:篡改动态内存区的内容,后果难以预料,非常危险。
//
//
因为free(str);之后,str成为野指针,
//
//
if(str != NULL)语句不起作用。
Test4();
//
-----------------------------------------------
}
posted on 2007-07-24 16:48
深邃者
阅读(120)
评论(0)
编辑
收藏
引用
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
网站导航:
博客园
IT新闻
BlogJava
知识库
博问
管理
Powered by:
C++博客
Copyright © 深邃者