首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

大家一个小疑点

2013-08-10 
求助大家一个小问题用malloc函数创建的指针,释放指针所指对象的时候,控制台为什么会卡住不动,而new建立的

求助大家一个小问题
用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;
}
代码贴上一运行,为什么会卡住不动



p = &a的时候把a的地址给了p,p原先的地址丢了,free(p)的时候是free a的地址,当然出错。
我认为 p= &a 应该改成 *p = a才合理,把a的值赋给p指向的内存地址中

热点排行