找Bug


 int CopyStringCount(const char* Str)
 {
         int nCount = 0;
         char* pBuffer;  
         pBuffer = new char[_MAX_PATH];  

         strcpy(pBuffer,Str);
         while(;pBuffer ;pBuffer++)
         if(pBuffer == '//') nCount ++;
         return nCount;
 }

Count the number of / in ginven string.

1.       Never judge whether the space allocation is successful after using the new operator.

Correction:
char *pBuffer=NULL;
pBuffer=new char[_MAX_PATH];
if (pBuffer = = NULL)

 return 0;

2.       strcpy is a dangerous function which may cause buffer overrun. Suggest using strncpy to replace it. And comparation between _MAX_PATH and the length of Str is necessary.

Correction:

int len = strlen(Str);

if (len >= _MAX_PATH)

  return 0;

strncpy(pBuffer, Str, len);

3.       while expression is wrong. Whats more, the control variable shall be *pBuffer, not pBuffer.

Correction:

while(*pBuffer++)

4.       In if expression, the variable shall be *pBuffer, not pBuffer.

Correction:

if (*pBuffer = = NULL)

5.       Forgot to deallocate the memory which allocated by new operator. And after deallocate, the pBuffer pointer shall be evaluated with NULL, in order to avoid it becoming a wild pointer.

Correction:

delete []pBuffer;

   pBuffer = NULL;

6. If add a ASSERT(Str !=  NULL) at the entry of the function, will be better.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值