指定された数のいわゆる「三角数」を生成するこの関数があります。dequeのあとがきを印刷すると、数字が増え、ジャンプして、再び増えます。三角数は私が上がるにつれて決して低くならないはずなので、ある種のオーバーフローが起こっているに違いありません。if(toPush > INT_MAX) return i - 1;
結果がオーバーフローした場合に関数がそれ以上の数値を生成しないようにする(そして生成された数値を返す)ように行を追加して修正しようとしました。ただし、これは機能していませんが、出力は引き続き正しくありません(しばらくの間増加し、低い数値にジャンプしてから、再び増加します)。私が追加した行は、実際には何もしていないようです。返品に到達していません。誰かがここで何が起こっているのか知っていますか?
#include <iostream>
#include <deque>
#include <climits>
int generateTriangleNumbers(std::deque<unsigned int> &triangleNumbers, unsigned int generateCount) {
for(unsigned int i = 1; i <= generateCount; i++) {
unsigned int toPush = (i * (i + 1)) / 2;
if(toPush > INT_MAX) return i - 1;
triangleNumbers.push_back(toPush);
}
return generateCount;
}