malloc函数使用时注意的点

1.

一定要注意使用malloc函数分配内存后一定要判断内存分配是否成功一旦不成功就需要做相关处理

2.一定要在内存使用结束后将malloc分配的内存free释放掉。

3.一定要将释放内存后的指针指向nullptr;

void  GetMemory(  char  **p,  int  num )
{
  *p = ( char  *)  malloc ( num );
}
void  Test(  void  )
{
  char  *str = NULL;
  GetMemory( &str, 100 );
  strcpy ( str,  "hello"  ); 
  printf ( str ); 
}

上面的代买就存在以上问题

1. 传入GetMemory的参数为字符串指针的指针,但是在GetMemory中执行申请内存及赋值语句 

1
*p = ( char  *)  malloc ( num );
后未判断内存是否申请成功,应加上:  
1
2
3
4
5
if  ( *p == NULL )
{
  ... //进行申请内存失败处理
}
同时应考虑num>0;
2. 未释放堆内存 动态分配的内存在程序结束之前没有释放,应该调用free, 把malloc生成的内存释放掉
3. printf(str) 改为 printf("%s",str),否则可使用格式化 字符串攻击

猜你喜欢

转载自blog.csdn.net/shantf93/article/details/79766450