大家一个小疑点

求助大家一个小问题
用malloc函数创建的指针,释放指针所指对象的时候,控制台为什么会卡住不动,
而new建立的内存,释放内存不会卡住呢。用delete或者free函数释放的内存。还有他们有什么区别吗?大家一个小疑点

------解决方案--------------------

 malloc 只会分配内存的 不会调用构造函数 帮你构造对象的
 new 会调用构造函数构造对象的


 free  只是释放内存空间, 不会调用析构函数的!
 delete 会调用析构函数析构对象的!

 malloc 和 free成对出现
 new 和delete 成对出现


------解决方案--------------------
引用:
Quote: 引用:

c的动态内存申请方式: malloc  申请内存 ,free 释放内存
c++动态内存申请:  new= malloc+调用对象构造函数  ,  delete 调用对象析构函数 + free

请问这个析构不就是释放内存吗,那free释放内存不调用析构函数怎么释放内存啊


析构函数只是释放对象而已,如果new出内存空间的话, 还是需要手动delete掉的!
------解决方案--------------------


引用:
Quote: 引用:


 malloc 只会分配内存的 不会调用构造函数 帮你构造对象的
 new 会调用构造函数构造对象的


 free  只是释放内存空间, 不会调用析构函数的!
 delete 会调用析构函数析构对象的!

 malloc 和 free成对出现
 new 和delete 成对出现
 释放内存不就是调用析构函数才可以吗?不调用析构函数怎么释放内存呢

谁说释放内存就是调用析构函数,调用析构函数的目的是为了在释放内存前做些处理,比如
class A
{
int a;
int c;
};
class B
{
int b;
A *pA;
B()
{
pA = new A;
}
~B()
{
delete pA;
}
}
如果你new B;申请一块内存,然后你delete后,如果你不在析构函数中delete pA的话,只是释放了B中的int b;A *pA;你申请的pA指向的内存并不会被释放
------解决方案--------------------
引用:
#include <iostream>
using namespace std;
int main()
{
void *p=malloc(4);
int a=5;
p=&a;
cout<<*reinterpret_cast<int*>(p)<<endl;
free(p);
return 0;
}
代码贴上一运行,为什么会卡住不动