C++ 链接列表中的访问冲突读取位置0xCCCC错误
调用C++ 链接列表中的访问冲突读取位置0xCCCC错误,c++,C++,调用showNode()时为什么会出现上述错误 #包括 #定义空0 使用名称空间std; 类myNode{ 私人: int数据; myNode*链接; 我的节点*第一; 公众: myNode(){ 数据=0; link=NULL; 第一个=空; } void insertNode(int值,int位置){ myNode n; 如果(i位置==1) { 第一个=&n; cout首先,您必须声明myNode*n=new myNode();,因为您在insertNode函数之外使用它。其次,您可能需要
showNode()
时为什么会出现上述错误
#包括
#定义空0
使用名称空间std;
类myNode{
私人:
int数据;
myNode*链接;
我的节点*第一;
公众:
myNode(){
数据=0;
link=NULL;
第一个=空;
}
void insertNode(int值,int位置){
myNode n;
如果(i位置==1)
{
第一个=&n;
cout首先,您必须声明myNode*n=new myNode();
,因为您在insertNode
函数之外使用它。其次,您可能需要检查第一个节点是否存在,以避免在1以外的任何位置插入第一个节点时出错(在您的情况下,如果第一次插入类似于insertNode(x,y!=1)
将引发错误,因为您试图访问第一个节点(此处:而(temp->link!=NULL))
,但该节点不存在。
这就是我认为你想要的:
void insertNode(int value, int iposition){
myNode *n = new myNode();
myNode *cur = first;
//insert first node or on first position
if (cur == NULL || iposition <= 1) {
n->data = value;
if (cur == NULL) { //first node
n->link = NULL;
}
else { //first position
n->link = first;
}
first = n;
return;
}
for (int i = 1; i < iposition - 1; i++) { //find given position
if (cur->link == NULL) { //if end
n->data = value;
n->link = NULL;
cur->link = n;
return;
}
cur = cur->link;
}
//here we are on position = iposition-1
n->data = value;
n->link = cur->link;
cur->link = n;
}//end insertNode
void insertNode(int值,int位置){
myNode*n=新的myNode();
myNode*cur=第一个;
//在第一个位置插入第一个节点或
如果(cur==NULL | | i位置数据=值;
如果(cur==NULL){//第一个节点
n->link=NULL;
}
else{//第一个位置
n->link=第一;
}
第一个=n;
返回;
}
对于(int i=1;ilink==NULL){//if结束
n->数据=值;
n->link=NULL;
cur->link=n;
返回;
}
cur=cur->link;
}
//我们现在在位置=i位置-1上
n->数据=值;
n->link=cur->link;
cur->link=n;
}//末端插入节点
当insertNode()退出时,“n”会发生什么?我无法计算出这里的投票结果。这是一个清晰、可重复且非常回答的问题。另一个提示:是否在insertNode()中的堆栈或堆上创建了n
?@DrewDormann-最近没有尝试调试?而且,任何链表问题都会引起几乎本能的反对/反对票。找到一个进行了一些调试的问题是如此令人震惊,以至于当它发生时,我倾向于在聊天室中链接。这和所有问题/问题似乎都属于同一类-有趣地更新本地变量但是,如果出现任何调试的迹象,很遗憾,删除一个节点是完全不同的,因此我不希望看到它。。
void insertNode(int value, int iposition){
myNode *n = new myNode();
myNode *cur = first;
//insert first node or on first position
if (cur == NULL || iposition <= 1) {
n->data = value;
if (cur == NULL) { //first node
n->link = NULL;
}
else { //first position
n->link = first;
}
first = n;
return;
}
for (int i = 1; i < iposition - 1; i++) { //find given position
if (cur->link == NULL) { //if end
n->data = value;
n->link = NULL;
cur->link = n;
return;
}
cur = cur->link;
}
//here we are on position = iposition-1
n->data = value;
n->link = cur->link;
cur->link = n;
}//end insertNode