【问题标题】:Why is it Segmentation fault every time?为什么每次都是Segmentation fault?
【发布时间】:2016-11-19 18:52:15
【问题描述】:

此代码仅在运行时给出错误,它是“分段错误”。如何解决这个问题?我不知道如何消除此错误。提前致谢!

#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++;
}

【问题讨论】:

    标签: memory


    【解决方案1】:

    带有所有警告的 GCC 会抛出这个:

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

    可能是开始检查的好地方。

    编辑:该问题已讨论here,基本上您在类定义中的private intint data 中都重用名称data 作为方法的参数。当你做this-&gt;data = data时,它怎么可能决定哪个是哪个?

    【讨论】:

      猜你喜欢
      • 2021-11-30
      • 1970-01-01
      • 1970-01-01
      • 2021-08-06
      • 2018-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多