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),否則可使用格式化 字符串攻擊

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章