re: 一个要引起注意的delete动作 lele 2007-06-07 14:25
问题不是出在temp是出在list_tail->back
list_tail对back的操作
back已经被释放了,不可再访问
呵呵 我水平很一般,前几天ACM亚洲银奖的同学敲代码,半小时做三道题,我都崩溃了……
慢慢来吧,总是天外有天的。
re: 一个要引起注意的delete动作 lele 2007-05-09 00:41
呵呵 这段时间有事离开了
我的意思就是感觉编程不能碰运气,还是以安全为上是好习惯
走查会根据编译器不同而分配给你用的内存的初始内容不同。谁也不能控制。
re: 一个要引起注意的delete动作 lele 2007-04-17 18:09
呵呵 我都被你误导了 temp != list_tail->back 和 temp != NULL 这两局并没有区别 list_tail->back 就是NULL
List_tail指向的内容被析构之后 系统就会给List_tail分配一个我们无法得知的指向。
back不在了之后 我下一步要执行的是判断temp是不是back 你说它都没有了怎么判断呢?
你的编程想法真的很有意思。你怎么知道temp一定是NULL 那是你的机器 我的机器就不是 而且怎么可能呢? 我是在堆栈上面申请的。temp是静态的。它指向的内存被系统回收了,你怎么还可以用呢? 无论是不是NULL 只要你动用就是出错。这样编程不好 代码可以说很差 太不安全 太随意 还要依靠运气 你说呢?
re: 一个要引起注意的delete动作 lele 2007-04-14 23:11
temp != list_tail->back && temp != NULL这里依然有个问题就是
先判断temp != list_tail->back会出错,还是把两个语句调换一下位置
这样就能保证安全性了 呵呵
你的想法挺好的 谢谢你的想法!
re: 一个要引起注意的delete动作 lele 2007-04-14 13:32
不过以后大家可以经常讨论 这是好事情 我要谢谢你的
re: 一个要引起注意的delete动作 lele 2007-04-14 13:31
list_tail是类的成员 这个类都被释放了就不存在了 那么你说list_tail是什么?? 而temp是无关的局部变量 它在这个局部内使我控制 除了这个局部就不是我能管理的了 但是类不同 temp要使用我类中的back成员 当然得back存在啊 而我把back delete了 你说temp指向的list_tail的back是什么??
re: 一个要引起注意的delete动作 lele 2007-04-14 00:09
呵呵 谢谢你的疑问 我刚刚走查了一下就是我的那个问题
你可以自己试一试 当执行到delTemp指向尾节点的前一个节点时 temp指向尾节点 此时还不满足temp != list_tail->back 但是下一句是
delTemp = temp; 这句之后 temp = temp->back; 这句之后 temp满足了退出循环的条件 但是它指向了尾节点的一部分(list_tail->back )而这个list_tail->back 经过随后的一步delete delTemp;就被删除了 这样在下一次循环入口条件判断时 temp已经成了一个野指针 对它的引用当然也是不正确的
不知道这样说你清楚了吗??
re: new的三中使用方法 lele 2007-04-04 06:56
char* p = new(nothrow) char[100];
long *q1 = new(p) long(100);
int *q2 = new(p) int[100/sizeof(int)];
这三句的意思是先用nothrow new申请char[100]空间,再在这片空间上申请一个long类型的空间存放100,然后是int型的数组?
re: 关于封装中virtual的消耗问题 lele 2007-03-31 19:23
因为i继承的层析越深虚拟表会越庞大 这样要判断正确执行哪一个虚函数就要查找整个虚拟表 然后动态在执行过程中绑定执行
我也不是很懂 说错了请大家更正 谢谢
re: 关于封装中virtual的消耗问题 lele 2007-03-31 19:21
是因为虚拟表吧??