This Error Occurs: Exception thrown at 0x0F2BFB7C (ucrtbased.dll) Is trying to change the size the problem?

0

So I'm making a selection sort program where I have to input two values: one for the numbers to use in the array, and the seed to use for the random number generator. I'm just a little confused on how to adjust the number used, since the maximum number of elements we can put in is 15. The array currently has 8. Each element should be a number between 20 and 40.

#include <iostream>
using namespace std;

int selectionSort(int[], int);

int selectionSort(int numbers[], int numbersSize) {
    int i = 0;
    int j = 0;
    int indexSmallest = 0;
    int temp = 0;  // Temporary variable for swap

    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;
            }
        }

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

int main() {
    int numbers[] = {10, 2, 78, 4, 45, 32, 7, 11};
    const int NUMBERS_SIZE = 15;
    int i = 0;
    int nums = 0;
    int seed = 0;

    cin >> nums;
    cin >> seed;

    srand(seed);

    for (int i = 0; i < nums; i++) {
        numbers[i] = (rand() % 20) + 20;
    }

    cout << "UNSORTED: ";
    for (i = 0; i < NUMBERS_SIZE; ++i) {
        cout << numbers[i] << " ";
    }
    cout << endl;

    selectionSort(numbers, NUMBERS_SIZE);

    cout << "SORTED: ";
    for (i = 0; i < NUMBERS_SIZE; ++i) {
        cout << numbers[i] << " ";
    }
    cout << endl;
}

When I input "10 100" (10 being the numbers to use in the array and 100 being the seed), I get this in the output screen:

UNSORTED: 25 36 35 24 24 34 38 22 29 29 5634432 10498254 1 8896376 8876856

SORTED: 1 22 24 24 25 29 29 34 35 36 38 5504116 5785352 5787344 15085774

with the error in the code: Exception thrown at 0x0F45FBA0 (ucrtbased.dll) in Project11.exe: 0xC0000005: Access violation reading location 0x00BF9640.

I'm betting this has something to do with the size of the array, since the original size is only 8 but we're using 10 numbers from the array, so the last two are null. How can I change the array input so each value is put in correctly?

c++
asked on Stack Overflow Sep 26, 2018 by John Smith • edited Sep 26, 2018 by John Smith

1 Answer

1

You write past the end of numbers, resulting in Undefined Behavior (in this case, overwriting the stack and possibly altering the return address).

Your SORTED output is garbage because of a typo in your cout statement.

answered on Stack Overflow Sep 26, 2018 by 1201ProgramAlarm

User contributions licensed under CC BY-SA 3.0