猿问

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

Student *stu = NULL; //Student是结构体类型
stu = (Student*)::HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,sizeof(Student) + 1024);
分配内存,stu成员指向的内存直接位于Student对象之后对吗?为什么?
更正一下:
Student结构中有一个成员char* str;
str成员指向的内存直接位于Student对象之后对吗?为什么?

拉莫斯之舞
浏览 226回答 3
3回答

慕尼黑5688855

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

隔江千里

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

侃侃尔雅

HeapAlloc()就是在堆上分配内存,简单点就是个分配内存的函数,想深入了解可以去查查分配内存的方式。stu是个指向Student的指针,HeapAlloc()执行后stu就指向已分配好的这段内存空间,可以在这个空间里存储Student结构对象。
随时随地看视频慕课网APP
我要回答