关于结构体变量清空的操作

梧桐126 2011-03-03 02:55:12
前段时间写一个DLL,定义了一个全局变量的结构体,每次调用的时候想先清空一下,用的ZeroMemory实现的,编译的时候没错,但是运行的时候遇到给结构体变量赋值就报错!求原因,以及该怎么实现?谢谢!代码如下:

typedef struct _MSG_INPUT_INFO //结构体定义
{
int msg_ErrCode;
CString msg_ErrMsg;
CString msg_title;
} MSG_INPUT_INFO;

//ZeroMemory(&m_gMsginput,sizeof(m_gMsginput));
m_gMsginput.msg_ErrCode = piErrCode;
m_gMsginput.msg_title.Format("ErrCode: %d",piErrCode);//如果加了ZeroMemory程序运行到这里就报错!

求高手指导。。。。。。。
...全文
434 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
梧桐126 2011-03-04
  • 打赏
  • 举报
回复
谢谢大家的帮助,我采用的是以下方法清空的:
m_gMsginput = new MSG_INPUT_INFO();
。。。
。。。
delete m_gMsginput;
ysjyniiq 2011-03-03
  • 打赏
  • 举报
回复
1,2楼回答了原因

CString msg_ErrMsg;
CString msg_title;
换成
TCHAR msg_ErrMsg[N];
TCHAR msg_title[M];
如果硬想用CString,而要对其实始化,可以构造函数里将其初始化
typedef struct _MSG_INPUT_INFO //结构体定义
{
_MSG_INPUT_INFO():msg_ErrCode(0){}
int msg_ErrCode;
CString msg_ErrMsg;//不需要特意初始化
CString msg_title;//不需要特意初始化
} MSG_INPUT_INFO;
oyljerry 2011-03-03
  • 打赏
  • 举报
回复
对于这类结构体,定一个Init的成员函数吧,然后函数内部对各个变量清空
Wang471981125 2011-03-03
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 fishion 的回复:]

MSG_INPUT_INFO m_gMsginput();这样吧
[/Quote]
++
fishion 2011-03-03
  • 打赏
  • 举报
回复
MSG_INPUT_INFO m_gMsginput();这样吧
fishion 2011-03-03
  • 打赏
  • 举报
回复
m_gMsginput();//刚我试了下报错了,好像不能这样用
梧桐126 2011-03-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 visualeleven 的回复:]
因为你的结构体你有CString成员,你ZeroMemory就错了
你可以为MSG_INPUT_INFO提供一个构造函数
比如
typedef struct _MSG_INPUT_INFO //结构体定义
{
int msg_ErrCode;
CString msg_ErrMsg;
CString msg_title;
_MSG_INPUT_INFO()
{
msg_……
[/Quote]

如果这样定义构造函数,那调用的时候是否是这样?
m_gMsginput._MSG_INPUT_INFO();//刚我试了下报错了,好像不能这样用
sxqinge 2011-03-03
  • 打赏
  • 举报
回复
LZ我错了,无视我吧。。。。
以为ZeroMemory()是你的成员函数呢
sxqinge 2011-03-03
  • 打赏
  • 举报
回复
结构体里面好像没见定义函数呢?
Eleven 2011-03-03
  • 打赏
  • 举报
回复
你的ZeroMemory()以后,你的CString的m_pchData的值NULL,你后面的Format也就错了
Eleven 2011-03-03
  • 打赏
  • 举报
回复
因为你的结构体你有CString成员,你ZeroMemory就错了
你可以为MSG_INPUT_INFO提供一个构造函数
比如
typedef struct _MSG_INPUT_INFO //结构体定义
{
int msg_ErrCode;
CString msg_ErrMsg;
CString msg_title;
_MSG_INPUT_INFO()
{
msg_ErrCode = 0;
msg_ErrMsg = _T("...");
msg_title = _T("...");
}
} MSG_INPUT_INFO;

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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