运行时检查失败#02,随机数添加到阵列

时间:2014-04-05 11:55:32

标签: c++ arrays sorting runtime-error

我写了一个应该排序数组的小程序。当我运行它时,它完成它的工作但似乎在数组中添加一个随机数。我也得到了标题中显示的错误。

#include "stdafx.h"
#include <iostream>
#include <algorithm>

void printArray(int nArray[], int nSize) {
using namespace std;
for (int jjj = 0; jjj <= nSize; jjj++)
    cout << nArray[jjj] << " ";
cout << endl;
}

void sortArray(int nArray[], int nSize, bool bPrint) {   // bPrint is used to wether print after every step or not

 for (int nStartIndex = 0; nStartIndex < nSize; nStartIndex++) {    // Durch jeden Teil des Arrays gehen
    int nSmallestIndex = nStartIndex;   // Den aktuellen Startindex als kleinsten nehmen

    for (int nCurrentIndex = nStartIndex + 1; nCurrentIndex <= nSize; nCurrentIndex++) {
        if (nArray[nCurrentIndex] < nArray[nSmallestIndex])
            nSmallestIndex = nCurrentIndex;
    }
    using namespace std;

    swap(nArray[nStartIndex], nArray[nSmallestIndex]);
    if (bPrint) {
        cout << "Swapping " << nArray[nStartIndex] << " and " << nArray[nSmallestIndex] << endl;
        printArray(nArray, nSize);
    }
  }

}

int main() {
    const int nSize = 7;
    int nArray[nSize] = { 3, 1, 5, 8, 2, 4, 6 };
    printArray(nArray, nSize);
    sortArray(nArray, nSize, true);
    std::cout << std::endl;
    system("pause");
    return 0;
}

2 个答案:

答案 0 :(得分:0)

你有两次<= nSize,它应该是< nSize。在C ++中,如果数组的大小为N,则有效索引为0N-1

答案 1 :(得分:0)

for循环条件不正确 - 应该是< nSize而不是<= nSize。这解释了为什么要打印一个额外的随机元素。

for (int jjj = 0; jjj < nSize; jjj++)
    cout << nArray[jjj] << " ";