每当我尝试运行它时,我的程序都会返回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;
}
答案 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
冒险进入范围。