【Linux C】总结——数组、指针and内存管理
来源:互联网 发布:逆战射源码 编辑:程序博客网 时间:2024/04/29 08:32
关于指针:
一维指针保存基本变量的地址
二维指针保存一维指针变量的地址
三维指针保存二维指针变量的地址
详解:【Linux C】浅谈指针(一)
关于传参:
传一维数组名,用数组元素的指针来接
传二维数组名,用一维数组的指针来接
传三维数组名,用二维数组的指针来接
传指针数组,用指针的指针接
关于数组名:
一维数组名:指针常量,指向数组首元素的地址
二维数组名:首个一维数组的地址(首行的地址)
三维数组名:首个二维数组的地址
如何避免野指针(养成良好的编程习惯):
1、当定义一个指针,且该指针没有指向时,将其置为空。
2、当要往指针指向的空间赋值时,先看是否给它分配了合法的空间。
取值和取地址:
&a;
*(&a) == a;
1、对一维数组的数组名取地址等于数组的地址。
对一维数组的地址取值等于数组首元素的地址。
2、对二维数组的数组名取地址等于二维数组的地址。
对二维数组的地址取值等于首个一维数组的地址。
3、对三维数组的数组名取地址等于三维数组的地址。
对三维数组的地址取值等于首个二维数组的地址。
数组与指针的区别(主要):
数组
指针
空间分配
静态分配
动态分配
访问效率
直接访问,效率高
间接访问,效率低
安全性
数据越界
内存泄漏
函数形参
都转化成相应的指针
你的数据放在哪里:
栈(stack):局部变量、函数形参、自动变量
堆(heap):malloc、realloc、calloc分配的空间
数据区(.bss段):未初始化的全局变量
数据区(.data段)(静态数据区):初始化过的全局变量、静态static修饰的变量
数据区(.rodata段):常量数据
代码段(.text段):代码
常见的内存错误及应对:
1、内存分配未成功,却使用了它。
应对:在使用之前检查内存是否分配成功。可以在使用内存之前检查指针是否为NULL,若分配成功便可以使用,否则打印错误信息并退出程序。
2、内存虽然分配成功,但是尚未初始化就引用它。
应对:
①注意赋初值
②在检查内存分配成功之后,先用memset或bzero函数清空分配好的内存空间原来的数据。
3、内存分配成功并且已经初始化,但操作越过了内存边界。
应对:在使用数组时,注意是否操作越界。有没有下标“多1”或“少1”的操作,特别要注意循环。
4、忘记了释放内存,造成内存泄漏。
应对:用完了动态内存之后一定要释放。动态内存的申请与释放必须配对,程序中malloc与free的使用次数一定要相同,new/delete同理。
5、释放了内存却继续使用它。
应对:释放完内存之后要及时将指针置空。
- 【Linux C】总结——数组、指针and内存管理
- C++内存管理——指针&&数组
- C++内存管理——指针&&数组
- C语言内存管理(数组,指针)
- C语言内存管理总结-野指针
- 内存分配详解、指针与数组[C++][内存管理]
- 内存分配详解、指针与数组[C++][内存管理]
- 内存分配详解、指针与数组[C++][内存管理]
- 内存分配详解、指针与数组[C++][内存管理]
- 内存分配详解、指针与数组[C++][内存管理]
- 内存分配详解、指针与数组[C++][内存管理]
- 内存分配详解、指针与数组[C++][内存管理]
- 内存分配详解、指针与数组[C++][内存管理]
- 内存分配详解、指针与数组[C++][内存管理]
- Android For JNI(四)——C的数组,指针长度,堆内存和栈内存,malloc,学生管理系统
- Android For JNI(四)——C的数组,指针长度,堆内存和栈内存,malloc,学生管理系统
- 《高质量C++/C编程指南》笔记——内存管理[3, 指针与数组的对比]
- C——内存管理总结
- 解决IntelliJ IDEA 创建Maven项目速度慢问题
- js获取输入框信息
- POJ1631——Bridging signals(动态规划,最长上升子序列应用)
- nodejs-- npm模块管理器
- 个人学习-java-结构模式(23种设计模式)
- 【Linux C】总结——数组、指针and内存管理
- Java for循环的几种用法分析
- Makefile (八) 使用函数
- Spring任务调度器之Task的使用
- 2014NOIP复赛模拟练习 设置喷水池 解题报告
- Eclipse中如何使用SVN及解决版本冲突
- 浅析HTTP协议
- tomcat8相关配置问题
- 高德地图设置当前地图的经纬度范围