对malloc使用的一点新理解

昨日在子函数中用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()了,举个简单例子:

// Code...
char *Ptr = NULL;
Ptr = (char *)malloc(100 * sizeof(char));

if (NULL == Ptr)
{
exit (1);
}

gets(Ptr);

// code...


free(Ptr);

Ptr = NULL;

// code...

永不止步步 发表于01-03 10:13 浏览65535次
分享到:

已有0条评论

暂时还没有回复哟,快来抢沙发吧

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

永不止步步
金币:67410个|学分:308317个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号