我有一个我认为是数学错误的东西,我不完全理解它为什么会发生.
if (mNextBottomIndex < mBlocks.size() - 1) { if (mBlocks[mNextBottomIndex + 1]->getGlobalPosition().y >= -mBlocks[mNextBottomIndex + 1]->getHeight()) { mBlocks[mNextBottomIndex + 1]->setAlpha(1.0f); mNextBottomIndex++; } }
它正在评估inner if statement
因为mBlocks.size() = 0
和mNextBottomIndex = 3
(或mNextBottomIndex
等于任何数字> 0).所以我的问题是,鉴于最后一句中的变量,它是如何过去的outer if statement
?应用程序不在后台线程中处理这些变量,并且变量在之前和之后是相同的outer if statement
我纠正外if statement
是
if (mBlocks.size() != 0 && mNextBottomIndex < mBlocks.size() - 1) { if (mBlocks[mNextBottomIndex + 1]->getGlobalPosition().y >= -mBlocks[mNextBottomIndex + 1]->getHeight()) { mBlocks[mNextBottomIndex + 1]->setAlpha(1.0f); mNextBottomIndex++; } }
它现在似乎没有崩溃.
mBlocks.size()是一个unsigned int.如果从值为0的无符号整数中减去1,它将下溢为一个大的正数.