指针学习笔记(一)

认识指针

内存

作用域生命周期
全局内存整个文件应用程序的生命周期
静态内存声明它的函数内部应用程序的生命周期
局部内存声明它的函数内部限制在函数执行时间内
动态内存由引用改内存的指针决定直到内存被释放

常量与指针

指针类型指针是否可修改指针指向的数据是否可修改
指向非常量的指针
指向常量的指针
指向非常量的常量指针
指向非常量的非常量指针

堆和栈

申请方式调用malloc、alloc获取当用户定义临时变量就会产生
释放使用free()进行释放,否则就会出现内存泄漏问题当前代码域退出时自动释放
生命周期随整个程序的,只有当该程序退出时,才由系统进行释放,否则会一直存在在申请点的作用域退出时自动释放
大小堆的空间一般比较大栈空间相对小

C的动态内存管理

内存泄漏

如果不再使用已分配的内存却没有将其释放就会发生内存泄露,导致内存泄漏的情况如下:

  • 丢失内存地址
  • 应调用free函数却没有调用(隐式泄漏)

动态内存分配函数

函数描述
malloc从堆上分配
realloc在之前分配的内存块的基础上,将内存重新分配为更大或者更小的部分
calloc从堆上分配内存并清零
free将内存返回堆

迷途指针

  内存已经被释放但是指针还在引用原始内存,这样的指针被称为迷途指针。迷途指针没有指向有效对象有时候也称为过早释放。

使用迷途指针会造成一系列问题,包括:

  • 如果访问内存,则行为不可预期
  • 如果内存不可访问,则是段错误
  • 潜在的安全隐患

导致这几类问题的情况可能如下:

  • 访问已释放内存
  • 返回的指针指向的是上次函数调用中的自动变量

处理迷途指针

  • 释放指针后置位NULL
  • 写一个特殊的函数替代free函数
  • 有些系统会在释放后复写数据,如果程序员在预期之外的地方看到这些值,可以认为程序可能在访问已释放的内存
  • 用第三方工具检测
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值