通过查阅资料,发现对于这些函数的解释说明非常多,也都非常细。为了便于大家记忆,下面是我对此函数的总结:
一、首先malloc()和free()的用法及记忆应该对照着来看。
二、函数原型及说明:
void *malloc:该函数分配了NumBytes个字节,并返回了指向这块内存的指针。如果分配失败,则返回⼀个空指针(NULL)。关于分配失败的原因,应该有多种,⽐如说空间不⾜就是⼀种。void *free():该函数是将之前⽤malloc分配的空间还给程序或者是操作系统,也就是释放了这块内存,让它重新得到⾃由。
三、函数的用法:
其实这两个函数⽤起来倒不是很难,也就是malloc()之后觉得⽤够了就甩了它把它给free()了,举个简单例子:
int *link = NULL;link = (int*)malloc(size(int)); //申请一段为int大小的内存空间。if(link == NULL){ exit(1);} else{get(link);free(link); //使用完之后应该释放掉,防止内存泄漏。link = NULL;
就是这样!当然,具体情况要具体分析以及具体解决。⽐如说,你定义了⼀个指针,在⼀个函数⾥申请了⼀块内存然后通过函数返回传递给这个指针,那么也许释放这块内存这项⼯作就应该留给其他函数了。
四、关于函数使⽤需要注意的⼀些地方:
1. 申请了内存空间后,必须检查是否分配成功。
2. 当不需要再使⽤申请的内存时,记得释放;释放后应该把指向这块内存的指针指向NULL,防⽌程序后⾯不⼩⼼使⽤了它。
3. 这两个函数应该是配对。如果申请后不释放就是内存泄露;如果⽆故释放那就是什么也没有做。释放只能⼀次,如果释放两次及两次以上会出现错误(释放空指针例外,释放空指针其实也等于啥也没做,所以释放空指针释放多少次都没有问题)。
4. 虽然malloc()函数的类型是(void*)任何类型的指针都可以转换成(void*)但是最好还是在前⾯进⾏强制类型转换,因为这样可以躲过⼀些编译器的检查。