单向链表触发访问权限冲突0XCDCD...

单向链表触发访问权限冲突0XCDCD...,第1张

初学数据结构,自己写单向链表时遇到如下问题

typedef struct lNode* list;
struct lNode
{
	int val;
	list next;
};

//尾插法插入节点
void addList(list& l, int val)  
{
	list lastCell = new lNode;
	lastCell->val = val; 
	list temp = l;     //构建临时节点指向表头
	if (!l)            //是否为第一个插入点
	{
		l = lastCell;
		return;
	}
	while (l->next)     //不为空则找到链表最后一个节点
	{
		l = l->next;
	}
	l->next = lastCell;
	l = temp;         //遍历后重新使l指向表头
}


int main()
{
	list l = new lNode;
	l = NULL;          //这里置空是为了方便判断第一个插入点
	addList(l, 1);
	addList(l, 2);
	printList(l);      //打印链表
	return 0;
}

然后报错访问权限问题

 发现是这类通常由链表初始化问题引起,参考以下文章:

C++读取访问权限冲突引发异常问题_Gabriel17的博客-CSDN博客_读取访问权限冲突解决:引发了异常: 读取访问权限冲突。


L 是 0xCDCDCDCD。


_断然Juvenile的博客-CSDN博客_引发了异常读取访问权限冲突参考第二篇文章发现了细节问题:申请到的List结点,其成员List next并不为空,然而遍历时却对其访问从而引发问题。


下图即为报错时链表尾l->next的地址。


 解决方案:

手动置尾插元素的next成员为nullptr

void addList(list& l, int val)  
{
	list lastCell = new lNode;
	lastCell->val = val; 
    lastCell->next = NULL;  //这里做修改!!!
	list temp = l;     
	if (!l)            
	{
		l = lastCell;
		return;
	}
	while (l->next)     
	{
		l = l->next;
	}
	l->next = lastCell;
	l = temp;         
}

 然后就可以正常输出了。


小白刚开始数据结构的学习,如有高见请不吝赐教,谢谢

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/564271.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-03
下一篇 2022-04-03

发表评论

登录后才能评论

评论列表(0条)

保存