free释放空间的解疑

malloc是c中分配动态空间的方式之一,free是释放分配的动态空间的方法。

但是呢,我们可以通过malloc来分配一段非常大的空间,free的时候仅仅是传递了应该指针作为参数,没有指出要收回的范围大小。

例子:

int*a =(int*)malloc(sizeof(int)*10);

free(a);

这里呢,我们一共分配了40个字节的空间。但是,free的时候仅仅传递了一个int*a的指针。

一个指针代表了什么,类型能够代表一定的范围,而实际内容是地址。

所以通过指针,我们最多能释放一个int 也即是4个字节的大小。

实际上呢,在我们分配空间的时候,分配空间的首地址的前面的4个字节,也就是一个int类型中,保存了我们分配到大小,因此呢,这里我们就可以非常轻松的来释放空间了。

在说说new相较于malloc的不同,实际new运算符就是对malloc的一层封装而已,

例子:

string* a=new string("xiaoming");

如果把new作为一个函数看到话,string("xiaoming")都算是参数吧。

分析的过程:
    第一步识别出后面的类型,根据类型来分配使用malloc分配相应空间,然后呢将malloc返回void类型指针转换成识别出的类型,怎么是被出来的呢
    可以使用模板吧,应该可以的。使用字符串匹配也是可以的吧,虽然比价麻烦,仔细考虑的化,好像字符串匹配不行,因为自定义的类怎么识别
    所以呢,这里只能模板了,然后通过指针来给分配的空间赋值,最会返回这个类型的指针。
    

实际上,new于malloc最大的区别就是它可以进行初始化的动作。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值