内存分配的两种方法

我们都知道内存分配有两种方法: new和malloc。他们有哪些相同点和不同点呢?

一,new是系统API函数,而malloc是库函数也即意味着在程序中调用malloc函数需要加载malloc.h头文件才能使用。

二,new创建的对象除分配内存外,还会调用类型的构造函数,同理delete会调用析构函数。如果用new赋值的指针,用free释放将有可能导致析构函数没有调用,一些变量内部生成的变量指针不能释放的问题出现。而用delete释放malloc的内存,将会由于缺少对类型本身的构造而直接析构的危险性。例如在一个类型在构造函数中用new为某个指针指定了内存,而在该类型的析构函数中释放了该指针指向的内存。

struct MyData
{
int *p;
MyData()
{
  p = new int();
}
~MyData()
{
if(p != NULL)
{
delete p;
p = NULL;
}
}
};
int main()
{
 MyData *pMyData  = new MyData;
free pMyData;
}

如果采用new -free组合,那么这个类型中的该指针指向的指针将不会被释放,而出现内存泄露。如果采用malloc -delete组合,将会出现没有为指针分配内存而直接释放的错误。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值