【问题标题】:This Error Occurs: Exception thrown at 0x0F2BFB7C (ucrtbased.dll) Is trying to change the size the problem?发生此错误:在 0x0F2BFB7C (ucrtbased.dll) 处引发异常 是尝试更改大小的问题吗?
【发布时间】:2018-09-26 11:51:16
【问题描述】:

所以我正在制作一个选择排序程序,其中我必须输入两个值:一个用于数组中使用的数字,另一个用于随机数生成器的种子。我只是对如何调整使用的数字有点困惑,因为我们最多可以放入 15 个元素。数组目前有 8 个。每个元素应该是 20 到 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;
}

当我输入“10 100”(10 是要在数组中使用的数字,100 是种子)时,我会在输出屏幕中看到:

未分类:25 36 35 24 24 34 38 22 29 29 5634432 10498254 1 8896376 8876856

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

代码中出现错误:在 Project11.exe 中的 0x0F45FBA0 (ucrtbased.dll) 处引发异常:0xC0000005:访问冲突读取位置 0x00BF9640。

我打赌这与数组的大小有关,因为原始大小只有 8,但我们使用了数组中的 10 个数字,所以最后两个为空。如何更改数组输入以便正确输入每个值?

【问题讨论】:

  • 使用std::vector。然后所有这些数组大小的问题都消失了。简而言之,您无法调整数组的大小。

标签: c++


【解决方案1】:

您写到numbers 的末尾,导致未定义的行为(在这种情况下,覆盖堆栈并可能更改返回地址)。

由于cout 语句中的拼写错误,您的 SORTED 输出是垃圾。

【讨论】:

  • 那么我应该在声明数组之前把大小放好吗?我不确定你指的是哪里。第二件事有所帮助
  • @JohnSmith 您的代码显示您有 15 个数字,但只有 8 个。这应该如何工作?您基本上对 selectionSort 函数撒了谎,结果,您写到了 numbers 数组的 real 末尾。如果你想解决这个问题,要么不要撒谎(给排序函数正确数量的数字进行排序),要么使用std::array,然后排序函数可以通过调用@987654327从std::arrray获取大小@.
猜你喜欢
  • 1970-01-01
  • 2021-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-20
  • 2021-11-14
  • 2016-11-12
相关资源
最近更新 更多