开元周游
德国频道
查看: 1432|回复: 4
打印 上一主题 下一主题

请教一个C++问题

[复制链接]
1#
匿名  发表于 3.9.2003 20:55:47
Class Obj {<br>  int i;<br>  ...<br>};<br><br>Obj* get() {<br>  Obj* a = new Obj();<br>  return a;<br>}<br><br>Obj* b = get();<br><br>b-&gt;i 到底是不是 a-&gt;i ?<br><br>我觉得理论上应该是相等的,但经过上千次的类似运行后(程序比较大,这里只是关键部分),居然出现了Speicherzugriffsfehler,debug时发现b-&gt;i是不能access的,这是怎么回事?如果两个指针所指的不同,没道理在崩溃前那么多次同样的计算可以成功.(感觉compiler是random的).<br><br>  
2#
发表于 3.9.2003 22:46:42 | 只看该作者
只用过JAVA,类似问题不应出现,JAVA中有垃圾回收机制,而C++不会主动回收,如果产生上千个实例,可能会有这种读取错误出现。另外a只是局部变量,没用的。<br>Obj* get() {<br>return new Obj();<br>}<br>这样写也行吧?
3#
匿名  发表于 4.9.2003 18:41:43
先谢谢答复&#33;&#33;<br>其实我的get中并没有new一个Obj,那样写是为了说明返回的的确是个Obj*.<br><br>说到garbage collector,怎么才能完全delete一个List?其自带的clear()只能把该List中的elements消除掉,而List本身所占的memory并没有被free掉.因为程序超大,所以不得不人工释放memory. (想想Java编程真是舒服,这些问题都不用考虑太多.)
4#
发表于 5.9.2003 11:45:52 | 只看该作者
用free或delete不行吗,应该能释放掉的,另外,如果程序过大,可考虑分成几个模块,分别编译,似乎可节省一点。也可考虑重新设计结构(纯粹个人想法)
5#
发表于 7.9.2003 04:48:27 | 只看该作者
这应该自己删除啊<br>c++中stl对指针并不是拥有关系而是认识关系<br><br>拥有关系就是当它不用时删除经<br><br>认识关系就是当它删除时不管<br><br>如<br>添加<br>list &lt;obj*&gt; a;<br>for(int i = 0 ; i&lt; 10 i++ ){<br>  a.pushback(obj.get());<br>}<br><br>释放<br>for (list &lt;obj*&gt;::iterator iter =  a.begin();iter &#33;= a.enc(); iter ++)<br>  delete iter;   //这里清茶内存 因为是使用get得到 所以要使用delete删除<br>a.clear();<br><br><br>java中是使用引用机制 <br>声明一个变量指向这对象时引用数+1<br>如果一个对象引用数为0那么会删除 <br>
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站点信息

站点统计| 举报| Archiver| 手机版| 小黑屋

Powered by Discuz! X3.2 © 2001-2014 Comsenz Inc.

GMT+1, 15.11.2024 22:42

关于我们|Apps

() 开元网

快速回复 返回顶部 返回列表