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
查看全文
相关阅读:
httpclient的maven依赖
阿里云maven仓库镜像
log4j2在webapp项目中的配置
web.xml中的filter标签
mybatis在xml文件中处理大于号小于号的方法
javaweb(三十八)——mysql事务和锁InnoDB(扩展)
javaweb(三十八)——事务
javaweb(三十七)——获得MySQL数据库自动生成的主键
javaweb学习总结(三十六)——使用JDBC进行批处理
JavaWeb(三十五)——使用JDBC处理Oracle大数据
原文地址:https://www.cnblogs.com/zhangqingping/p/1432633.html
最新文章
double型字符串转int型——c#
鼠标焦点自动落在textbox控件上——c#
chart控件获取鼠标点击坐标,十字坐标跟随——c#
ToString("X2 ")——c#
ListBox控件——c#
添加/删除/读写c盘文件——c#
Java学习者论坛【申明:来源于网络】
[模板]详细设计说明书(整理版)【申明:来源于网络】
小风黑客工具包 2016完整版【申明:来源于网络】
破解各种软件注册码【申明:来源于网络】
热门文章
亲手教你破解软件和制做注册机【申明:来源于网络】
IT资源关东煮第一期【来源于网络】
Android热门网络框架Volley详解[申明:来源于网络]
Android必学-异步加载+Android自定义View源码【申明:来源于网络】
Android Studio 工具窗口浮动与布局恢复【申明:来源于网络】
最全面的Android Studio使用教程【申明:来源于网络】
win10单击右键很慢的解决办法
vue-webpack-simple模板build后图片加载问题
docker的常用命令
linux中添加用户和组
Copyright © 2011-2022 走看看