假设我们有以下类:
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/