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