为了账号安全,请及时绑定邮箱和手机立即绑定

您好,请问一下HeapAlloc是什么意思啊?

您好,请问一下HeapAlloc是什么意思啊?

拉莫斯之舞 2021-12-14 15:11:25
Student *stu = NULL; //Student是结构体类型stu = (Student*)::HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,sizeof(Student) + 1024);分配内存,stu成员指向的内存直接位于Student对象之后对吗?为什么?更正一下:Student结构中有一个成员char* str;str成员指向的内存直接位于Student对象之后对吗?为什么?
查看完整描述

3 回答

?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

这个是从堆里面申请了一块内存,内存大小是Student的大小加1K
如果你的 char *str是Student的成员
那么str本身所占用的内存是属于Student的对象的内存
但是str所指向的内存在那里,是要看你如何给 str赋值的,你找找如下的语句:
stu->str=
但是我看你的程序多申请了1K内存,感觉就是准备让str指向这里的。

查看完整回答
反对 回复 2021-12-19
?
隔江千里

TA贡献1906条经验 获得超10个赞

HeapAlloc是内存分配函数,详细权威的文档参考MSDN。
//分配了一块内存,大小是sizeof(Student) + 1024,并且内存的地址保存在变量stu里
HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,sizeof(Student) + 1024);
这块内存地址被强制转化为类型(Student*),编译器在得到这个信息之后,会使用(Student)类型来解析你的代码对这块内存的访问。目前来看,这是一块放满了0的内存,里面没有任何对象和数据,就是一堆0。为什么,因为你使用了HEAP_ZERO_MEMORY标志。

查看完整回答
反对 回复 2021-12-19
?
侃侃尔雅

TA贡献1801条经验 获得超16个赞

HeapAlloc()就是在堆上分配内存,简单点就是个分配内存的函数,想深入了解可以去查查分配内存的方式。stu是个指向Student的指针,HeapAlloc()执行后stu就指向已分配好的这段内存空间,可以在这个空间里存储Student结构对象。

查看完整回答
反对 回复 2021-12-19
  • 3 回答
  • 0 关注
  • 225 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号