无法找出导致此崩溃的原因(SIGABRT)

时间:2019-03-06 03:23:07

标签: c++

每当我尝试运行它时,我的程序都会返回SIGABRT错误。但是,如果我尝试将randomNums1设置为非98(即99或49)的大小来运行它,程序将执行得很好。下面是我的函数代码,然后是我的函数调用。 为什么这仅适用于某些大小的randomNums1而不是全部?

using namespace std;

int SelectionSort(int numbers[], int numbersSize) {
    int counter = 0;
    int i;
    int j;
    int indexSmallest;
    int temp;

    for (i = 0; i < numbersSize - 1; ++i) {
        // Find index of smallest remaining element
        indexSmallest = i;
        for (j = i + 1; j < numbersSize; ++j) {
            if ( numbers[j] < numbers[indexSmallest] ) {
                indexSmallest = j;
            }
            counter++;
        }

        // Swap numbers[i] and numbers[indexSmallest]
        temp = numbers[i];
        numbers[i] = numbers[indexSmallest];
        numbers[indexSmallest] = temp;
        counter++;
    }
    return counter;
}

int main() {
    srand(time(0));
    int randomNums1[98];
    int total;
    for (int i = 0; i < 99; i++) {
        randomNums1[i] = 1 + rand() % ((1000 - 1) + 1);
    }
    total = SelectionSort(randomNums1, 99);
    cout << total;
}

1 个答案:

答案 0 :(得分:0)

for (int i = 0; i < 99; i++)

i的范围为[0,98]。

int randomNums1[98];

的有效范围是[0,97],所以

randomNums1[i] = 1 + rand() % ((1000 - 1) + 1);

冒险超出范围。

解决方案:缩小i的范围。

for (j = i + 1; j < numbersSize; ++j)

还允许j冒险进入范围。