关于this指针的疑问
本帖最后由 computingbear 于 2013-02-19 11:09:07 编辑 最近遇到一个奇怪的BUG,在实现一个链表的结构并测试其删除节点的功能时,程序突然出现异常,Debug显示异常来自如下代码段:
void SetPrev(Node* node)
{
this->prev = node;
}
我Debug的时候查看了this指针的值,发现this == NULL。
我就不明白了,都delete掉了,this指针都为NULL了,怎么还能访问SetPrev这个函数?
然后过了一段时间我再次运行,又好了。难不成出现Bug还是个概率问题?
补充一点就是在调用SetPrev函数之前,我都事先判断了当前节点是否为空,即
if(node != NULL)
{
node->SetPrev(node);
}
所以按理说不应该出现空指针调用SetPrev的情况。不知各位有什么高见?
delete this指针
[解决办法]
你的代码编译能过么,this是用在类内部的,void SetPrev(Node* node)你定义的是全局变量?
[解决办法]
void SetPrev(Node* node)
{
if(this != NULL)
this->prev = node;
}
这代码是不合理的。 不需要判断this是否为空。
应该是你删除node的过程有逻辑问题。 node 被delete掉了,但是没给NULL.
查看代码 有没有
delete node;
node = NULL;
if(node != NULL)
{
node->SetPrev(node)
}
[解决办法]
我觉得楼上的说的很有可能!能不能把你定义的链表结构发上来。
[解决办法]
this 是不能用在非成员函数中的
[解决办法]
看看堆栈调用流程0 0是谁来调的?