c++ - 通过指向类的指针调用类函数

标签 c++ class pointers

假设我们有以下类:

    class Cell
    {
    private:
        int x;
        Cell *next;
    public:
        Cell(int a)
        {
              x = a;
        }
        int getX()
        {
              return x;
        }
        Cell *getNext()
        {
              return next;
        }

     };

以及休闲类:

    class Snake
    {
    private:
        Cell *tail;
    public:
        Snake()
        {
            Cell newCell(10);
            tail = &newCell;
        }
        Cell *getTail()
        {
            return tail;
        }
    };

这是我们的主要功能:

      int main()
      {
           Snake newSnake;
           int a = newSnake.getTail()->getX();
           cout << a << endl;
           return 0;
       }

当我执行我的代码时,我得到了输出:

      -858993460     

当输出预期为:

       10

我似乎无法弄清楚问题出在哪里,有什么想法吗?

最佳答案

 tail = &newCell; 

这一行会导致未定义的行为。在它超出范围后 newCell 被销毁并且 tail 仍然指向那里可能有任何东西(正确值,0,随机值或......)

解决您的问题:

首先,我认为整个设计有问题,需要重新审视。但是,我会在不触及设计的情况下以尽可能少的更改来纠正错误。

改变这个:

   Snake()
    {
        Cell newCell(10);
        tail = &newCell;
    }

到:

   Snake()
    {
        Cell newCell(10);
        tail = new Cell(10);;
    }

然后添加:

   ~Snake()
    {
        delete tail;
    }

关于c++ - 通过指向类的指针调用类函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34463708/

相关文章:

javascript - 经典继承与原型(prototype)继承的区别

java - 使用类或不使用类

Python将类属性导入方法局部命名空间

c - 以下处理指针的代码有什么问题?

c++ - 在范围外丢失指针引用

c - 这段代码究竟有什么问题......?

c++ - 谁能帮我解决这个程序的问题(它使用指针转置矩阵)

c++ - 尝试使用 OpenGL 设置 Xcode

c++ - QT:动态子按钮不可见

c++ - QGraphicsScene 中的 QGraphicsView 大小