假设我们有以下类:
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
我似乎无法解决问题是什么,任何想法?
答案 0 :(得分:1)
tail = &newCell;
此行将导致未定义的行为。超出范围后newCell
被销毁,tail
仍指向那里可能是任何东西(正确值,0,随机值或......)
解决您的问题:
首先,我认为整个设计已经破裂,需要进行审核。但是,我会在不触及设计的情况下以更少的可能更改来纠正错误。
改变这个:
Snake()
{
Cell newCell(10);
tail = &newCell;
}
为:
Snake()
{
Cell newCell(10);
tail = new Cell(10);;
}
并添加:
~Snake()
{
delete tail;
}
答案 1 :(得分:0)