对malloc使用的一点新理解

来源:本站
导读:目前正在解读《对malloc使用的一点新理解》的相关信息,《对malloc使用的一点新理解》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《对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()了,举个简单例子:

 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...

提醒:《对malloc使用的一点新理解》最后刷新时间 2024-03-14 01:00:49,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《对malloc使用的一点新理解》该内容的真实性请自行鉴别。