C野指针简单理解

xk2wm 2019-07-08 05:21:35
首先,野指针不能理解为指向NULL的指针。在编程中,都会对指针变量进行if判断,一旦发现了是NULL都会立即报错或者返回。因此NULL指针危险性不会很大。 野指针,应该理解为指向一个不合法地址的指针,那么也就把问题转变为何为不合法地址了。有两种情况: 1.没有初始化指针变量 2.通过在堆区初始化了指针变量,在释放了堆区内存后,不再理会指针变量了 具体来说,第一种情况是因为没有初始化的指针变量的缺省值是乱七八糟随便给的,一个这样的地址就是不合法的地址,因此要对指针变量赋初始值。 第二种情况,比如int *p=(int*)malloc(sizeof(int)); free(p);这种操作,指针变量p的确赋初始值了,问题是如果free以后就不管p指针了,释放的只是malloc的内存,而p所指向的那个地址这一点没有变,因为我们知道指针就只是指向一个地址的,free掉了地址里面的内容,但是地址仍然存在,只是此时的地址已经没有内容,也就是没有意义了,那也就是说此时指针变量p指向了一个不合法的地址。
...全文
210 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xk2wm 2019-07-08
  • 打赏
  • 举报
回复
引用 2 楼 自信男孩 的回复:
ok,明白了,谢谢指教
636f6c696e 2019-07-08
  • 打赏
  • 举报
回复
在编程中,都会对指针变量进行if判断,一旦发现了是NULL都会立即报错或者返回。因此NULL指针危险性不会很大。 这个前提是不一定的。 其他没啥问题
super_admi 2019-07-08
  • 打赏
  • 举报
回复
危险性大不大,纯粹看人品。
自信男孩 2019-07-08
  • 打赏
  • 举报
回复
free不是释放了里面的内容,而是把堆上的空间(申请的)由使用状态变成未使用状态,即其他的进程或程序可以继续使用这部分内存区域
只是对内存状态做了修改,并没有对内存里的内容作修改。
ggglivw 2019-07-08
  • 打赏
  • 举报
回复
答对了

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧