subject_14522.htm

来自「一些关于vc的问答」· HTM 代码 · 共 18 行

HTM
18
字号
<p>
序号:14522 发表者:松岛菜菜鸟 发表日期:2002-09-08 14:15:48
<br>主题:malloc过的结构体中的CString变量为什么无法赋值?
<br>内容:struct nameidtp<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CString name;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CString id;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;struct nameidtp * next;<BR>&nbsp;&nbsp;&nbsp;&nbsp;};<BR>我定义了结构体nameidtp,然后执行了下面这个程序段,编译通过的,但是执行的时候会非法操作。问题好像是出在FirstNode-&gt;id="a";这里,好像是"a"赋值进不去。<BR>原来我是想把name2idset.m_ClientID赋进去的,出错,然后试图把把name2idset.m_ClientID付给CString型的temp,然后再把temp赋给FirstNode-&gt;id,结果temp也赋不进去,现在改成字符串常量,竟然也赋不进去!<BR>struct nameidtp *p;<BR>while (!name2idset.IsEOF())<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p=FirstNode;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FirstNode=(struct nameidtp *)malloc(sizeof(struct nameidtp));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//temp=name2idset.m_ClientID;//为了突出重点,注释掉<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FirstNode-&gt;id="a";//这样赋值也会错?<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//temp=name2idset.m_ClientName;//注释掉了。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FirstNode-&gt;name="temp";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FirstNode-&gt;next=p;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name2idset.MoveNext();<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>出错后,断点是在:<BR><BR><BR>void CString::AllocBeforeWrite(int nLen)<BR>{<BR>(箭头)&nbsp;&nbsp;&nbsp;&nbsp;if (GetData()-&gt;nRefs &gt; 1 || nLen &gt; GetData()-&gt;nAllocLength)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Release();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AllocBuffer(nLen);<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;ASSERT(GetData()-&gt;nRefs &lt;= 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 + -
显示快捷键?