subject_14522.htm
来自「一些关于vc的问答」· HTM 代码 · 共 18 行
HTM
18 行
<p>
序号:14522 发表者:松岛菜菜鸟 发表日期:2002-09-08 14:15:48
<br>主题:malloc过的结构体中的CString变量为什么无法赋值?
<br>内容:struct nameidtp<BR> {<BR> CString name;<BR> CString id;<BR> struct nameidtp * next;<BR> };<BR>我定义了结构体nameidtp,然后执行了下面这个程序段,编译通过的,但是执行的时候会非法操作。问题好像是出在FirstNode->id="a";这里,好像是"a"赋值进不去。<BR>原来我是想把name2idset.m_ClientID赋进去的,出错,然后试图把把name2idset.m_ClientID付给CString型的temp,然后再把temp赋给FirstNode->id,结果temp也赋不进去,现在改成字符串常量,竟然也赋不进去!<BR>struct nameidtp *p;<BR>while (!name2idset.IsEOF())<BR> {<BR> p=FirstNode;<BR> FirstNode=(struct nameidtp *)malloc(sizeof(struct nameidtp));<BR> //temp=name2idset.m_ClientID;//为了突出重点,注释掉<BR> FirstNode->id="a";//这样赋值也会错?<BR> //temp=name2idset.m_ClientName;//注释掉了。<BR> FirstNode->name="temp";<BR> FirstNode->next=p;<BR> name2idset.MoveNext();<BR> }<BR>出错后,断点是在:<BR><BR><BR>void CString::AllocBeforeWrite(int nLen)<BR>{<BR>(箭头) if (GetData()->nRefs > 1 || nLen > GetData()->nAllocLength)<BR> {<BR> Release();<BR> AllocBuffer(nLen);<BR> }<BR> ASSERT(GetData()->nRefs <= 1);<BR>}<BR>我不懂了。还请各位大侠帮忙吧!谢谢
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:史列因 回复日期:2002-09-08 14:34:33
<br>内容:FirstNode=(struct nameidtp *)malloc(sizeof(struct nameidtp));<BR>你分配了内存但却没有执行CString的构造函数对数据进行初始化,当然会出错。<BR>改成:<BR>FirstNode = new nameidtp;
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:松岛菜菜鸟 回复日期:2002-09-08 21:28:35
<br>内容:哦,原来是这样啊。谢谢。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?