在C++中,使用malloc申请的内存能否通过delete释放?使用new申请的内存能否用free?

 我来答
匿名用户
2013-08-21
展开全部
不能,malloc /free主要为了兼容C,new和delete 完全可以取代malloc /free的。malloc /free的操作对象都是必须明确大小的。而且不能用在动态类上。new 和delete会自动进行类型检查和大小,malloc/free不能执行构造函数与析构函数,所以动态对象它是不行的。当然从理论上说使用malloc申请的内存是可以通过delete释放的。不过一般不这样写的。而且也不能保证每个C++的运行时都能正常。
archmageee4
2017-06-27 · TA获得超过1516个赞
知道大有可为答主
回答量:1581
采纳率:78%
帮助的人:904万
展开全部

从编程纪律、规则上说,是不可以。

因为 new 和delete 操作时, 是把对象当成一个复杂类,而执行对应的构造/析构函数。  而 malloc 和 free 则不执行它们。

题目中所说的两种错配情况, 会导致不可预测的错误发生。而这种错误,在项目很大时是比较难发现的。相当于项目中埋藏的炸弹。

但是当对象是简单类型时,确实是不会出错。比如

int *i=new int[100];
free(i);

原因是 int,float 这种数字类型过于简单,没有复杂的构造/析构函数,因此此时 new 和 malloc是等价的。

但是比如在复杂类型A中:

class A
{
void * t;
public A(){
t=malloc(100);
}
public ~A() {
free(t);
}
};

void main() {
A *m=new A();
A *n=(A *)malloc(sizeof(A));//导致n的构造 没运行
free(m);        //导致m的析构没运行.
delete n;        



}

错配会导致严重的问题,比如内存泄漏等。

因此工作中不提倡这种错配写法,尽管有时可能不会导致程序出错,但是这是一种很坏的习惯。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
大话修身
2017-06-16 · TA获得超过2533个赞
知道小有建树答主
回答量:252
采纳率:0%
帮助的人:185万
展开全部
当然可以了。delete只是c++的一个全局重载操作符。他只是在free前调用对象的析构方法。
但是new申请的内存用free释放则不会调用对象的析构方法。当然如果你是一个非对象类型,那可以。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式