关于this指针的疑问

computingbear 2013-02-19 10:56:16
最近遇到一个奇怪的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的情况。不知各位有什么高见?
...全文
264 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
computingbear 2013-02-19
  • 打赏
  • 举报
回复
哦,我刚发现有一点没注意,就是我调用删除节点函数时,代码是这样写的 //... while(某节点 != NULL) { if(满足某个条件) { 某节点 = 链表->DelItemByPoint(某节点);//这里可能有问题 if(某节点为空) return; 某节点 = 某节点->GetNext(); } } //...
computingbear 2013-02-19
  • 打赏
  • 举报
回复
关键是现在运行又好了,是不是用了模版后的问题,我只是担心以后又出现异常。
computingbear 2013-02-19
  • 打赏
  • 举报
回复
哦,不好意思我没考虑周到,我之前给出的是示意代码,SetPrev是成员函数
氰客 2013-02-19
  • 打赏
  • 举报
回复
看看堆栈调用流程0 0是谁来调的?
xiaoji0507 2013-02-19
  • 打赏
  • 举报
回复
this 是不能用在非成员函数中的
computingbear 2013-02-19
  • 打赏
  • 举报
回复
回复2楼:不巧的是,编译过了... 回复3楼: delete node中node是一个指向某个节点的临时指针,就算我赋值为NULL也没啥作用啊。 回复4楼: 删除节点的代码如下:

template <typename T2>
T2* SpriteStore<T2>::DelItemByPoint(T2* t2)
{
	if(t2 == NULL)
		return NULL;
	T2* prev = t2->GetPrev();
	T2* next = t2->GetNext();
	if(NULL == prev)
	{
		this->head = next;
		if(this->head != NULL)
			this->head->SetPrev(NULL);
	}
	else
	{
		prev->SetNext(next);
		if(next != NULL)
		{
			next->SetPrev(prev);
		}
		else
		{
			link = prev;
		}
	}
	delete t2;
        //这里没加t2 = NULL;
	nSize--;
	return prev;
} 
Mr_Right 2013-02-19
  • 打赏
  • 举报
回复
我觉得楼上的说的很有可能!能不能把你定义的链表结构发上来。
FingerStyle 2013-02-19
  • 打赏
  • 举报
回复
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) }
caoh110 2013-02-19
  • 打赏
  • 举报
回复
你的代码编译能过么,this是用在类内部的,void SetPrev(Node* node)你定义的是全局变量?
computingbear 2013-02-19
  • 打赏
  • 举报
回复
是不是我应该改成 void SetPrev(Node* node) { if(this != NULL) this->prev = node; }

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧