malloc/free与new/delete简单讲

一:malloc/free(函数)

malloc(memory allocation),意为动态内存分配,,从堆中分配和释放内存。
一般形式:

void *malloc(int numbytes);
void free(void *ptr);

案例一:

    int *p = NULL;
	p = (int*)malloc(10 * sizeof(int));
	if (p)
	{
		*p = 10;//只用到了分配40个字节当中的前4个
		cout << *p << endl;
		free(p); //记得释放内存
	}

案例二:

    int *p = NULL;
	int *q = NULL;
	p = (int*)malloc(10 * sizeof(int));
	q = p;
	if (p)
	{
		*q++ = 10;//在当前位置上赋值,然后指针移动
		*q++ = 20;//在当前位置上赋值,然后指针移动
		cout << *p << endl;
		cout << *(p+1) << endl;
		free(p); 
	}

二:new/delete(运算符)

使用方式:

指针变量名 = new 类型标识符;
指针变量名 = new 类型标识符(初始值);
指针变量名 = new 类型标识符[内存单元个数];

案例一:

int *p = new int; 
	if (p != NULL) //new失败可能直接报异常,而不是返回NULL
	{
		*p = 20;
		cout << *p << endl;
		delete p;
	}

案例二:

    int *p = new int(2); 
	if (p != NULL) //new失败可能直接报异常,而不是返回NULL
	{
		cout << *p << endl; //2
		*p = 20;
		cout << *p << endl; //20
		delete p;
	}

案例三:

int *p = new int[100]; //申请100*4个字节
	if (p != NULL) //new失败可能直接报异常,而不是返回NULL
	{
		int *a = p; //a指向p所申请内存的首地址
		*a++ = 3;
		*a++ = 6;
		cout << *p << endl; //3
		cout << *(p+1)<< endl; //6
		delete[] p; //释放内存,不用写成delete[100] p;
	}

注意:
(1)malloc/free与new/delete必须配套使用
(2)不可多次使用delete来释放同一块内存,因为这个时候,已经不是把属于自己的内存空间进行释放了,有可能会出现程序异常。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值