malloc到底做了什么?

JZY0801 2012-02-04 10:38:35
这是一小段程序:
class T
{
public:
T(int i = 100) : a(i){ cout<<"Hello"<<endl; }
~T(){ cout<<"ByeBye"<<endl; }
void show(){ cout<<a<<endl; }
private:
int a;
};

int main()
{
T *pt;
pt = (T*)malloc(sizeof(T));
pt->show();
free(pt);
return 0;
}


...全文
118 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
iamnobody 2012-02-04
  • 打赏
  • 举报
回复
只用malloc 则堆中对象根本没有构造。没有构造的对象就是无效的。所以楼主写法是访问无效的对象。是未定义行为。
用new代替没什么不好。
呆呆猫 2012-02-04
  • 打赏
  • 举报
回复
动态分配空间。
对应c++中类类型对象的空间一定要用new分配~~~
贝隆 2012-02-04
  • 打赏
  • 举报
回复
分配一块连续内存给指定的指针变量。使用它必须注意,不然很可能导致内存泄漏
sagegz 2012-02-04
  • 打赏
  • 举报
回复
分配了私有数据成员a的存储空间。
JZY0801 2012-02-04
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 mingliang1212 的回复:]
只用malloc 则堆中对象根本没有构造。没有构造的对象就是无效的。所以楼主写法是访问无效的对象。是未定义行为。
用new代替没什么不好。
[/Quote]

就你说到了点上!
碎炎 2012-02-04
  • 打赏
  • 举报
回复
malloc不调用构造函数
RLib 2012-02-04
  • 打赏
  • 举报
回复
new到malloc到HeapAlloc到VirtualAlloc[Ex]到NtAllocateVirtualMemory, 然后发现弄不下去了, 回到new
Jun_code 2012-02-04
  • 打赏
  • 举报
回复
为什么不用new和delete呢?
程序员小迷 2012-02-04
  • 打赏
  • 举报
回复
单步调试进去,你就明白了

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧