对malloc使用的一点新理解
时间:10-15 16:03 阅读:2002次
*温馨提示:点击图片可以放大观看高清大图
简介:昨日在子函数中用malloc申请内存使用后,意外发现在free的时候出现异常错误,后经检查发现原来是实际使用时指针长度超过了申请的范围。
现总结一些使用malloc时要注意的地方:
1,不要Free二次,配套使用。否则当free第一次的时候没有问题,第二次的时候就是在free一个野指针了,程序也不知道你到底在free什么东西。
2,不要跨进程分配和释放;
不要free多次或0次;
注意判断分配是否成功;
3,对于malloc()和free()需要注意的,补充一句,为了确保对于一个有效指针只free一次,所以应该在malloc返回失败、free指针以后都因该把指针置空,而在free前应该判断指针是否为空!只要按照这种方式去写代码应该是没问题的!当指针置空后你爱怎么free都没事。
4,在一个函数里边malloc了一个指针,然后返回值是这个指针,也需要free。
5,指向malloc申请的堆内存的指针,在运用过程中千万不要另付值,否则同样导致内存泄露。比如我*p=(char*)malloc(sizeof(char)*100);然后我进行p++,再free(p);这样是会出问题的。free()传入的参数必须是内存段的头指针,如果你给程序的东西不是牛头不对马嘴,它肯定要跟你闹矛盾。
6,malloc后,实际使用时指针长度超过了你申请的范围,当再去free时肯定出问题!其实很好理解,你申请了十块大洋,你买不了十一块大洋的东西。
其实这两个函数用起来倒不是很难,也就是malloc()之后觉得用够了就甩了它把它给free()了,举个简单例子:
1 // Code...
2 char *Ptr = NULL;
3 Ptr = (char *)malloc(100 * sizeof(char));
4
5 if (NULL == Ptr)
6 {
7 exit (1);
8 }
9
10 gets(Ptr);
11
12 // code...
13
14
15 free(Ptr);
16
17 Ptr = NULL;
18
19 // code...