⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject_33420.htm

📁 一些关于vc的问答
💻 HTM
字号:
<p>
序号:33420 发表者:胖娃娃 发表日期:2003-03-20 00:35:41
<br>主题:VC6竟然表里不一!!!
<br>内容:诸位看官,小生这里有一段代码(关于模板类),在VB6的IDE环境下,不论DEBUG还是RELEASE模式,都会非法操作错。但是,到系统里DOS窗口中运行,DEBUG模式依旧出同样的错,但是RELEASE模式却一切正常,没有任何错误,而且结果也正确。据我自己跟踪,发现错误发生点在main()函数的最后一句:“return 0”,其实就是执行析构函数时发生了非法操作。跟踪进去到运行库里,我就看不懂了。请问各位过路高手,此因何为?谢过了先。<BR><BR>// TempCls.cpp : Defines the entry point for the console application.<BR>//<BR><BR>#include "stdafx.h"<BR>#include "iostream.h"<BR><BR>template&lt;class _type&gt; class MyTempCls<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;private:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_type *e;<BR>&nbsp;&nbsp;&nbsp;&nbsp;public:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;long nCnt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyTempCls(const int idxcnt = 16);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyTempCls(_type ev, const int idxcnt = 16);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;~MyTempCls();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_type&amp; operator[](const int subidx) const;<BR>&nbsp;&nbsp;&nbsp;&nbsp;public:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void SetAt(const int subidx, const _type ev);<BR>};<BR><BR>template&lt;class _type&gt; MyTempCls&lt;_type&gt;::MyTempCls(const int idxcnt)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;e = new _type[idxcnt];<BR>&nbsp;&nbsp;&nbsp;&nbsp;nCnt = idxcnt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;for(int i = 0; i &lt; nCnt; i++, *e = NULL);<BR>}<BR><BR>template&lt;class _type&gt; MyTempCls&lt;_type&gt;::MyTempCls(_type ev, const int idxcnt)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;e = new _type[idxcnt];<BR>&nbsp;&nbsp;&nbsp;&nbsp;nCnt = idxcnt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;for(int i = 0; i &lt; nCnt; i++,e[i]=ev);<BR>}<BR><BR>template&lt;class _type&gt; MyTempCls&lt;_type&gt;::~MyTempCls()<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;delete e;<BR>}<BR><BR>template&lt;class _type&gt; _type&amp; MyTempCls&lt;_type&gt;::operator [](const int subidx) const<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;return e[subidx];<BR>}<BR><BR>template&lt;class _type&gt; void MyTempCls&lt;_type&gt;::SetAt(const int subidx, const _type ev)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;e[subidx] = ev;<BR>}<BR><BR><BR>int main(int argc, char* argv[])<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;MyTempCls&lt;int&gt; nObj(8, 8);<BR>&nbsp;&nbsp;&nbsp;&nbsp;nObj.SetAt(2, 10);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;MyTempCls&lt;char&gt; cObj('_', 16);<BR>&nbsp;&nbsp;&nbsp;&nbsp;cObj.SetAt(6, 'B');<BR>&nbsp;&nbsp;&nbsp;&nbsp;cObj.SetAt(8, 'J');<BR>&nbsp;&nbsp;&nbsp;&nbsp;cObj.SetAt(10, 'M');<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;int i;<BR>&nbsp;&nbsp;&nbsp;&nbsp;for(i = 0; i &lt; nObj.nCnt; i++, cout &lt;&lt; nObj[i] &lt;&lt; " , ");<BR>&nbsp;&nbsp;&nbsp;&nbsp;cout &lt;&lt; endl &lt;&lt; endl;<BR>&nbsp;&nbsp;&nbsp;&nbsp;for(i = 0; i &lt; cObj.nCnt; i++, cout &lt;&lt; cObj[i]);<BR>&nbsp;&nbsp;&nbsp;&nbsp;cout &lt;&lt; endl &lt;&lt; endl;<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;return 0;<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>回复者:微笑的撒旦 回复日期:2003-03-20 09:09:53
<br>内容:在构造函数中for(int i = 0; i &lt; nCnt; i++,e[i]=ev);有问题。它多占了一个空间并且第一个int地址没有被赋值!e[i]=ev与i++的位置应该交换。<BR><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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -