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