2015-07-18 2 views
-3

Pourquoi l'erreur ci-dessus se produit-elle lors de l'appel showNode()?Accédez à la violation de l'emplacement de lecture Erreur 0xCCCCCCCC dans la liste de liens

#include<iostream> 
#define NULL 0 

using namespace std; 

class myNode{ 

private: 
    int data; 
    myNode* link; 
    myNode* first; 

public: 
    myNode(){ 

     data=0; 
     link=NULL; 
     first=NULL; 

    } 

    void insertNode(int value, int iposition){ 

     myNode n; 

     if (iposition==1) 
     { 
      first=&n; 
      cout<<first<<endl; 
      n.data=value; 
      n.link=NULL; 
     } 

     if (iposition>1) 
     { 
      int nodeCounter=1; 

      myNode* temp=first; 

      while (temp->link != NULL) 
      { 
       nodeCounter++; 
      }// this while counts the number of inserted nodes. 

      if (iposition>nodeCounter)//if the position of the new node is greater than number of inserted node, 
             //it will be inserted at the end. 
      { 
       cout<<"Node will be inserted at end."<<endl; 

       myNode* ieTemp=first; 

       while (ieTemp->link != NULL) 
       { 
        ieTemp=ieTemp->link; 
        cout<<ieTemp->data<<endl; 
       } 

       ieTemp->link=&n; 
       n.data=value; 
       n.link=NULL; 
       cout<<&n<<"  "; 

      } 

      else 
      { 
       myNode* imTemp=first; 

       while (iposition-1) 
       { 
        imTemp=imTemp->link; 
        iposition--; 
       } 

       n.link=imTemp->link; 
       n.data=value; 
       imTemp->link=&n; 

      } 
     } 

    }//end insertNode 

    void showNode(){ 

     myNode* sTemp=first; 

     while (sTemp != NULL) 
     { 
      cout<<sTemp->data<<" "; 
      sTemp=sTemp->link; 
     } 

    }//end showNode 

}; 

int main(){ 

    myNode a; 
    a.insertNode(10,1); 
    a.insertNode(20,2); 
    a.insertNode(25,3); 
    a.insertNode(30,4); 
    a.insertNode(40,5); 


    a.showNode(); 


system("pause"); 
} 
+4

Qu'advient-il « n » lorsque insertNode() sort –

+0

Je ne peux pas comprendre les votes proches ici ce?. est une question claire, reproductible et très responsable –

+0

Autre indice: est-ce que 'n' est créé sur la pile ou le tas dans' insertNode() '? –

Répondre

0

D'abord, vous devez déclarer myNode *n = new myNode(); parce que vous utilisez en dehors de insertNode fonction. Deuxièmement, vous pouvez vérifier si le premier noeud existe pour éviter l'erreur lors de l'insertion du premier noeud sur une autre position que 1 (dans votre cas, si votre première insertion sera inserNode(x, y != 1) va générer une erreur car vous essayez d'accéder au premier noeud (ici: while (temp->link != NULL))) mais ce noeud n'existe pas
C'est ce que je pense que vous voulez.

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