2016-11-19 5 views
-2

Dieser Code gibt einen Fehler nur in der Laufzeit und es ist "Segmentierung Fehler". Wie kann das angegangen werden? Ich habe keine Ahnung, wie ich diesen Fehler beheben kann. Danke im Voraus!Warum ist die Segmentation jedes Mal fehlerhaft?

#include <iostream> 
#include <cstddef> 

using namespace std; 

class Node 
{ 
    private: 
     int  data; 
     Node* nextNodeAddress; 

    public: 
     Node(): nextNodeAddress(NULL) {} // if next node is not used it must be null. 

     void setData(int); // this function sets data in the node 
     int  retrieveData(); // this function retrieves the data from the node 
}; 

void Node::setData(int data) 
{ this->data=data; } 

class List 
{ 
    private: 
     Node* headNode; 
     Node* currentNode; 
     int listSize; 
    public: 
     List(); 
     void addNode(int); 
     void deleteNode(int); 
}; 

List::List(): headNode(NULL),currentNode(NULL) 
{ 

} 

void List::addNode(int data) 
{ 
    Node* newNode = NULL; 
    newNode->setData(data); 
    newNode->setNextNode(NULL); 
    if(headNode==NULL) 
     headNode = newNode; 
    else 
     currentNode->setNextNode(newNode); 
    currentNode = newNode; 
    this->listSize++; 
} 

Antwort

0

GCC mit allen Warnungen auf wirft dies:

In member function ‘void Node::setData(int)’: 
18:28: warning: declaration of ‘data’ shadows a member of 'this' [-Wshadow] 
void Node::setData(int data) 

Könnte ein guter Ort seine Überprüfung zu starten.

Edit: Das Problem wird here diskutiert, im Grunde sind Sie den Namen Wiederverwendung data in beide private int in der Klassendefinition und int data als Parameter für die Methode. Wie könnte es möglicherweise entscheiden, welches ist, wenn Sie this->data = data tun?

Verwandte Themen