找Bug

来源:互联网 发布:python算术运算符 编辑:程序博客网 时间:2024/04/28 16:28


 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.

原创粉丝点击