申请结构体空间中的一个问题
long setString(char * str)
{
MessageBox(NULL,str,"setString",0);
return(0);
};
long getString(char *str,long length)
{
return 0;
}
typedef long setStringStr(char *);
typedef long getStringStr(char *,long);
typedef struct{
setStringStr *setString;
getStringStr *getString;
}IExampleVtbl;
typedef struct {
IExampleVtbl *lpVtbl;
int count;
char buffer[80];
} IExample;
IExample * example;
example=(IExample *)GlobalAlloc(GMEM_FIXED,sizeof(IExample)+sizeof(IExampleVtbl *));
example->lpVtbl->setString=setString;
example->lpVtbl->getString=getString;
example->lpVtbl->setString("setString");
红色代码中如果去掉sizeof(IExampleVtbl *)后,编译,运行出现错误:"0x00401122"指令引用的"0x00000000"内存,该内存不能为"written"
不明白为什么还要加上sizeof(IExampleVtbl *),难道sizeof(IExample)不包含sizeof(IExampleVtbl *)的空间大小吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
![扫码二维码加入Web技术交流群](/public/img/jiaqun_03.jpg)
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
复制代码这两种写法都是错误的!
你应该:
复制代码最基本的内存分配概念了。。
2楼正解。
LZ那样的分配,只不过是多分配了四个字节的空间供example操作,至于example->lpVtbl是个完全没有初始化的指针。
回复 2# 雨过白鹭洲
谢谢回复!
还有一点不明白:
(IExampleVtbl *) GlobalAlloc(GMEM_FIXED, sizeof(IExampleVtbl));是如何分配内存(如何布局的)?
带*和不带*是不一样的