2013-03-13 115 views
0

當我設置循環迭代10次它的工作原理,但無論我設置了多少次迭代總是會在12次出現此錯誤。這裏是下面的代碼。循環 - 訪問衝突寫入位置0xabababab

有誰知道爲什麼會發生這種情況?或者如果我錯過了代碼中的邏輯錯誤。感謝

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; 
+0

錯誤發生在哪條線上? – interjay 2013-03-13 13:20:40

+0

你從哪裏得到訪問違規? – 2013-03-13 13:21:02

+2

來吧..'calcTotal [j + 1]'將爲'j == sSize - 1'生成UB,因爲數組的大小爲'sSize',有效索引爲'0'到'sSize-1'。修正你的循環在'j'上,直到'j + 1 stefan 2013-03-13 13:22:40

回答

2

您正在訪問calcString[j+1]calcTotal[j+1]j等於sSize-1上最後的循環運行。所以你要走出數組邊界。