我已经设法修复,或者更确切地解决了这个问题,所以我不是在寻求帮助,但我真的很好奇这种语言的根本原因是什么。
我的代码中有以下代码(cocos2d-x,但我不认为这是相关的)游戏:
const Size& Checkbox::getContentSize() const
{
Size size;
size.height = label->getContentSize().width;
size.width = label->getContentSize().height + hPadding + checkbox->getContentSize().height;
return size;
}
该函数返回一个只有宽度的大小,而高度保持为0.但是,如果我在返回之前添加任何代码,该函数将返回一个包含正确宽度和高度的大小。
const Size& Checkbox::getContentSize() const
{
Size size;
size.height = label->getContentSize().width;
size.width = label->getContentSize().height + hPadding + checkbox->getContentSize().height;
int meaninglessInteger = 10;
return size; //size gets returned properly
}
如果我这样做,它也会正常返回:
const Size& Checkbox::getContentSize() const
{
float height = label->getContentSize().width;
float width = label->getContentSize().height + hPadding + checkbox->getContentSize().height;
return Size(width, height); //size gets returned properly
}
这是来自cocos2d-x引擎本身的虚函数,因此我无法使用参数或使任何不是const或引用。无论如何,我只想知道导致这种行为的原因,特别是为什么通过添加无效的代码来修复它。
答案 0 :(得分:0)
size 在堆栈中,并且在您返回后将其解除分配。您将返回对将要取消分配的变量的引用。这是未定义的行为。