C语言野指针就是未初始化的指针么

RT... RT 展开
 我来答
_何聪辉
推荐于2016-08-29 · TA获得超过123个赞
知道答主
回答量:27
采纳率:0%
帮助的人:6.5万
展开全部
未初始化的指针可以称为野指针(wild pointer),但是野指针并不仅仅是未初始化的指针. 一般来说,野指针(dangling pointer, wild pointer)指向的是内存中无效的对象, 这样说可能很抽象, 比如以下几个例子.

1. 如果有一段代码如下
char *dp = NULL;
{
  char c;
  dp = &c;
} /* c falls out of scope */
当程序走出大括号作用域后, 变量c的内存(在栈中)被系统回收,但是dp仍让指向那块内存,这块内存今后很有可能被系统用作其他用途,此时如果*dp,dp指向的内容将不会是你期待的内容,此处,dp可以称为野指针.

2. 第二种情况是用户自己分配内存,然后自己释放内存,释放内存后仍然引用指针指向的内容, 比如
#include <stdlib.h>
void func()
{
  char *dp = malloc(A_CONST);
  free(dp); /* dp now becomes a dangling pointer */
  dp = NULL; /* dp is no longer dangling */
}
在执行完free(dp)后,dp是一个野指针,因为他指向的内存已经被释放掉了,系统可能会把这段内存用于其他地方.这个时候,常用的一种做法是把这个指针设为NULL, 设为NULL的指针可以由程序员使用if (dp == NULL)语句坚持出来, 但是野指针无法监测.

3. 另外一种情况是指针指向函数中分配的栈内存,函数返回后,内存被回收,但是指针指向的地址没有改变,因此这个指针也是野指针.比如
int *func(void)
{
int num = 1234;
/* ... */
return #
}

从以上三点可以总结出, 野指针其实就是就像一段无效的内存(被系统回收), 但是这个指针的值并不是NULL, 因此如果没有立刻把这个指针赋其他有效值,或者NULL值, 以后再次引用野指针就会出现segmentation faults这样的错误

参考资料: http://en.wikipedia.org/wiki/Dangling_pointer

百度网友288ba2d
2013-01-11 · TA获得超过364个赞
知道小有建树答主
回答量:314
采纳率:0%
帮助的人:268万
展开全部
野指针是指你分配内存后并且也释放了的,但是没有将指针置为NULL的指针俗称野指针。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
满爽0w
2013-01-11
知道答主
回答量:1
采纳率:0%
帮助的人:1525
展开全部
野指针是指指向垃圾内存的指针,未初始化只是其中一种而已,还有就是malloc分配内存的指针未释放,越过了变量的作用范围。大概就这三种。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Apple林
2013-01-11 · TA获得超过2093个赞
知道小有建树答主
回答量:895
采纳率:66%
帮助的人:542万
展开全部
可以你new的指针,但是没有free
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zjfaok
2013-01-11 · TA获得超过6805个赞
知道大有可为答主
回答量:4146
采纳率:62%
帮助的人:1557万
展开全部
free之后的呢?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式