最近总结的安全编程注意要点

一、空指针问题

1、指针在使用前没有做为空判断,导致程序Crash

2、指针在new之后没有判断是否new成功

3、类成员指针没有初始化,却在析构函数中判断是否为空并删除

 

二、内存越界问题

内存越界导致的问题往往比空指针来得更严重,因为有很高的几率可能导致死机。

以下是我们采取的解决方案:

wsprintf sprintf 一律使用 _snwprintf _snprintf 代替

memcpy 尽量使用 SafeMemCopy 代替

 

SafeMemCopy 的实现如下:

#define SAFEMEMCPY_SUC 0

#define SAFEMEMCPY_LENGTH_ERROR 1

#define SAFEMEMCPY_POINTNULL_ERROR 2

inline int SafeMemCopy(void* pDest, size_t lenDest, const void* pSource, size_t lenSource)

{

   if(lenSource > lenDest)

   {

      return SAFEMEMCPY_LENGTH_ERROR;

   }

   if((NULL == pDest) || (NULL == lenSource))

   {

      return SAFEMEMCPY_POINTNULL_ERROR;

   }

   memcpy(pDest, pSource, lenSource);

   return SAFEMEMCPY_SUC;

}

 

三、            内存泄露

1、 删除指针数组时,容易忘记删除数组中指针指向的空间,造成内存泄露

2、 WM下构造字体,创建画笔等资源,在使用后忘记删除,造成内存泄露。建议少使用HFontHPen等句柄方式,而采用CFont, CPen

3、 在执行逻辑复杂,拥有多处返回的函数中,往往容易在函数返回时忘记删除指针,造成泄露。建议多使用智能指针。

 

四、            内存浪费

1、            在存在继承关系的地方。除非确定的确属于公有的部分,否则不要将多余成员放置到基类中

2、            使用量比较大的结构体尽量不要采用一个最大长度的数组在存储内容,建议改为指针和长度表示

转载于:https://www.cnblogs.com/okluo/archive/2008/07/24/1250617.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值