0

ループを10回反復するように設定すると、それは機能しますが、何度設定しても、常に12回でこのエラーが発生します。これが以下のコードです。

なぜこれが起こるのか誰かが知っていますか?または、コードに論理エラーがある場合は、見逃しています。ありがとう

string* Analyser::topFiveBuyers()
{
//set size and add buyer names for comparison.
string *calcString = new string[sSize];
int calcTotal[sSize] = {INT_MIN, INT_MIN, INT_MIN, INT_MIN, INT_MIN};

//checks transactions
for (int i = 0; i<nTransactions; i++)
{
    //compares with arrays
    for(int j =0; j<sSize; j++)
    {

    if(calcTotal[j] < calcTotal[j+1])
    {
    int tVar = calcTotal[j+1];
    string tStr = calcString[j+1];
    int tVarTwo = calcTotal[j];
    string tStrTwo = calcString[j];

    calcTotal[j] = tVar;
    calcString[j] = tStr;
    calcTotal[j+1] = tVarTwo;
    calcString[j+1] = tStrTwo;
    }

        if(tArray[i].buyerName == calcString[j])
        {
        calcTotal[j] += tArray[i].numShares;
        break;
        }
        else
            {
                //checks if shares is great then current total then replaces
                if(tArray[i].numShares > calcTotal[j])
                {
                    int tVar = calcTotal[j];
                    calcTotal[j+1] = tVar;
                    string tStr = calcString[j];
                    calcString[j+1] = tStr;
                    calcTotal[j] = tArray[i].numShares;
                    calcString[j] = tArray[i].buyerName;
                    break;
                }
            }
    }
}
return calcString;
4

1 に答える 1

2

あなたはアクセスcalcString[j+1]していて、最後のループ実行時calcTotal[j+1]j同じです。sSize-1つまり、配列の境界の外に出ます。

于 2013-03-13T13:23:04.700 に答える