返回信息流刚面试的时候被问到,使用指针时有什么风险?
这是一条镜像帖。来源:北邮人论坛 / cpp / #42288同步于 2010/8/10
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
指针都有什么风险
vos
2010/8/10镜像同步9 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
指到了不该指的地方...
【 在 coolfantasy 的大作中提到: 】
: 指到了敏感部位
: --
: 微博 http://t.sina.com.cn/coolfantasy
: ...................
会悬垂
【 在 coolfantasy 的大作中提到: 】
: 指到了敏感部位
: --
: 微博 http://t.sina.com.cn/coolfantasy
: ...................
{
char s='a';
int *ptr;
ptr=(int *)&s;
*ptr=1920;
}
指针ptr是一个int*类型的指针,它指向的类型是int。它指向的地址就是s的首地址。在32位程序中,s占一个字节,int类型占四个字节。最后一条语句不但改变了s所占的一个字节,还把和s相临的高地址方向的三个字节也改变了。这三个字节是干什么的只有编译程序知道,而写程序的人是不太可能知道的。也许这三个字节里存储了非常重要的数据,也许这三个字节里正好是程序的一条代码,会造成崩溃性的错误。
{
char a;
int *ptr=&a;
ptr++;
*ptr=180;
}
第3句对指针ptr进行自加1运算后,ptr指向了和整形变量a相邻的高地址方向的一块存储区。而第4句竟然往这片存储区里写入一个数据,这是严重的错误。所以在使用指针时,程序员心里必须非常清楚:我的指针究竟指向了哪里。在用指针访问数组的时候,也要注意不要超出数组的低端和高端界限,否则也会造成类似的错误。
在指针的强制类型转换:ptr1=(TYPE*)ptr2中,如果sizeof(ptr2的类型)大于sizeof(ptr1的类型),那么在使用指针ptr1来访问ptr2所指向的存储区时是安全的。如果 sizeof(ptr2 的类型)小于sizeof(ptr1的类型),那么在使用指针ptr1来访问ptr2所指向的存储区时是不安全的。
【 在 xiecaiji 的大作中提到: 】
: 各种风险,内存越界,使用未分配的地址,没初始化就使用,还有什么野指针之类的。。总结的不全。。还是baidu吧
: --
: [color=red]newyear1987是我偶像[/color]
: ...................
总结得差不多了,一般是踩内存、指向非法地址。前者的后果是出现一些奇怪的问题,很难定位。 后者会出现访问异常。
---
非凡技术 www.feifanbbs.com 诚招版主