1、可以用if代替assert断言。
2、如果空间够,分配就会失败,malloc()会返回一个NULL指针。而free()函数对空指针没有作用(相当于不调用free()函数)
3、如果分配失败,就不用作清理工作(比如调用free()函数)。
1、可以用if代替assert断言:但是malloc在用户空间分配内存几乎不会失败,编程时你应该知道划分多大内存是保险的, 如果你划分的很大很大,即使是用了 if语句执行失败返回那也是失败了,对你程序来说没有任何意义。因为即使你不使用if语句,操作系统也会给你贴出个oops,告诉你你内存泄露了。
所以说,检查malloc成败只在调试阶段有用的。
2, 如果你malloc失败就根本没用告诉操作系统要保留某段内存,那也就根本不用free了。
void getmo(char *p)
{
p=(char*)malloc(10);
int i = 0;
}
void main()
{
char *str;
getmo(str);//传递了一个指针到函数,函数内部不能改变原来的指针本身,只能改变指针指向的内容
//换句话说,getmo() 函数调用时,将str指针赋给了形参p
//函数getmo()内部也没有改变p 指向的内容(等同于str指向的内容)
//但当getmo() 返回时,p并未将其值赋给str ,所以原来的str并没有改变
memcpy(str, "11111", 6);
}