C语言学习之内存管理函数malloc()和free()

原文:http://blog.csdn.net/sdwuyulunbi/article/details/6643481


      在C语言的学习中,对内存管理这部分知识的掌握尤其重要。

      malloc()和free()的基本概念以及基本用法:

     1、函数原型及说明: void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针。如果分配失败,则返回一个空指针(NULL)。关于分配失败的原因,应该有多种,比如说空间不足就是一种。 void free(void *FirstByte):该函数是将之前用malloc分配的空间还给程序或者是操作系统,也就是释放了这块内存,让它重新得到自由。但是执行free(FirstByte)后FirstByte指针并不为NULL,建议free(FirstByte)后将FirstByte赋值NULL,请看一下测试代码:

#include <iostream>
#include <cstring>
using namespace std;

int main(int argc,char* grgv[])
{
	char *str=(char *)malloc(100);
	strcpy(str,"Hello");
	free(str);   //<==>delete str;
	cout<<str<<endl;
	if(str!=NULL)
	{
		strcpy(str,"world");
		cout<<str<<endl;
	}
	return 1;
}




      2、函数的用法:其实这两个函数用起来倒不是很难,也就是malloc()之后觉得用够了就甩了它把它给free()了。

      3、关于函数使用需要注意的一些地方:

          A、申请了内存空间后,必须检查是否分配成功。 

         B、当不需要再使用申请的内存时,记得释放;释放后应该把指向这块内存的指针指向NULL,防止程序后面不小心使用了它。

         C、这两个函数应该是配对。如果申请后不释放就是内存泄露;如果无故释放那就是什么也没有做。释放只能一次,如果释放两次及两次以上会出现错误(释放空指针例外,释放空指针其实也等于啥也没做,所以释放空指针释放多少次都没有问题)。

          D、虽然malloc()函数的类型是(void *),任何类型的指针都可以转换成(void *),但是最好还是在前面进行强制类型转换,因为这样可以躲过一 些编译器的检查。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值