洞察纵观鸿蒙next版本,如何凭借FinClip加强小程序的跨平台管理,确保企业在数字化转型中的高效运营和数据安全?
539
2022-11-12
总结了一些指针易出错的常见问题(六)
安全问题与指针误用
误用指针
释放问题
// 宏定义(仅仅是替换)#define PINT int*;PINT ptr1, ptr2;其实是定义 int* ptr1, ptr2;一个指针,一个整型常量。//typedef 命名已有数据类型(优于宏定义)typedef int* PINT;PINT ptr1, ptr2;
宏定义和typedef区别参考:预处理命令与用typedef命名已有类型
// 宏定义 和 typedef区别 #include
使用指针之前未初始化指针(野指针)
处理未初始化指针(不可只依靠检查指针的内容来判断它是否有效)
总是用NULL来初始化指针
用assert函数(用来测试指针是否为空值);assert(pi!=NULL);
若为空值,输出:Assertion failed: pi!=NULL;
用第三方工具
指针的使用问题
缓冲区溢出的几个原因:
访问数组元素时没有检查索引值
对数组指针做指针算术运算时不够小心
用gets这样的函数从标准输入读取字符串
误用strcpy和strcat这样的函数;
测试NULL
用malloc这类函数时一定要检查返回值,否则可能会导致程序非正常终止。
迷途指针(释放指针后却仍然在引用原来的内存,就会产生迷途指针)
超过数组边界访问内存
用下标计算的地址不会检查索引值。
错误计算数组长度
将数组传递给函数时,一定要同时传递数组长度,这个信息帮助函数避免越过数组边界。
#include 错误使用sizeof操作符 #include 一定要匹配指针类型 总是用合适的指针类型来装说句是个好主意。 有界指针 有界指针是指指针的使用被限制在有效的区域内。比如说,现在有一个32个元素的数组,禁止对这个数组使用的指针访问数组前面或后面的任何内存。 字符串的安全问题 字符串相关的安全问题一般发生在越过字符串末尾写入的情况。 指针算术运算和结构体 只对数组使用指针算术运算,因为数组肯定分配在连续的内存块上,指针算术运算可以得到有效的偏移量。不过,不应该将它们用在结构体内,因为结构体的字段可能分配在不连续的内存区域。 函数指针的问题 内存释放问题 重复释放 清除敏感数据(在释放内存之前将敏感数据清空) 小结:
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~