zoukankan
html css js c++ java
[转]一个比较有用的指针测试程序
//
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();
//
-----------------------------------------------
}
原文链接:
http://www.cppblog.com/mzty/archive/2006/07/07/9536.html
查看全文
相关阅读:
我会采更多的雏菊
tomcat 9.0中,用cookie进行会话时出现的不合法字符问题
踩坑tomcat8.5的cookie机制
安装排错 max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
centos7虚拟机安装elasticsearch5.0.x-安装篇
远程登录多用户同时访问Win7系统远程桌面
ubuntu安装mysqlclient
ubuntu设置默认python版本
rabbitmq
csrf_execmp
原文地址:https://www.cnblogs.com/zhangqingping/p/1432633.html
最新文章
听 Fabien Potencier 谈Symfony2 之 《What is Dependency Injection ?》
处理Oracle中杀不掉的锁
oracle日常维护语句
ORACLE里锁的几种模式
Linux 下挂载硬盘的 方法
linux 挂载存储步骤(以emc 5300为例)
CentOS挂载新硬盘
linux下挂载ISCSI存储设备
Linux下iscsi的使用
linux下搭建SVN服务器完全手册
热门文章
Linux 搭建SVN 服务器
Spring RestTemplate 之post请求
Spring RestTemplate 之get请求
linux基础之grep
Java基础之反射总结
Linux基础之sed
too many open files(打开的文件过多)解决方法
confluence中org.apache.tomcat.util.net.NioEndpoint$Acceptor.run Socket accept failed的解决方法
Tomcat报异常:Too many open files 的解决之路
linux命令useradd添加用户详解
Copyright © 2011-2022 走看看