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