【问题标题】:selection sort array run time error选择排序数组运行时错误
【发布时间】:2013-11-23 06:15:05
【问题描述】:

这是我第一次来这里。我真的希望任何人都可以帮助我。所以这是我的问题。我不断收到关于损坏的“arr”的运行时错误 #2。但程序运行良好,直到结束。我想不通。

这是我的代码:

#include <iostream>
using namespace std;

void main(){
int arr1[3];
int temp;
//INPUT NUMBERS
for (int i=0; i<5;i++)
    {
    cin>>arr1[i];
    }
cout<<endl;
//SORT

for(int c=0;c<5;c++)
{

    for (int k=0;k<5;k++)
        {   
             if(arr1[c]<arr1[k])
            {
                temp=arr1[k];
                arr1[k]=arr1[c];
                arr1[c]=temp;
            }
        }

}
    for (int m=0; m<5; m++)
    {
        cout<<arr1[m]<<endl;
    }

}

【问题讨论】:

  • 您正在声明一个大小为 3 的数组并使用它来存储 5 个元素。
  • 就像内德说的。您应该声明常量以确保您是一致的。类似const int ARRAY_SIZE = 5; int arr1[ARRAY_SIZE]; ... for (int i = 0; i &lt; ARRAY_SIZE; i++) ...

标签: c++ selection-sort


【解决方案1】:

试试这个:

#include <iostream>
using namespace std;

int main()
{
    int arr1[5];
    int temp;
//INPUT NUMBERS
    for (int i = 0; i < 5; i++) {
    cin >> arr1[i];
    }
    cout << endl;
//SORT

    for (int c = 0; c < 5; c++) {

    for (int k = 0; k < 5; k++) {
        if (arr1[c] < arr1[k]) {
        temp = arr1[k];
        arr1[k] = arr1[c];
        arr1[c] = temp;
        }
    }

    }
    for (int m = 0; m < 5; m++) {
    cout << arr1[m] << endl;
    }

}

它可以正确编译,没有任何错误。您犯的错误是声明数组的大小。如果你想在 puts 中存储 5,你需要声明一个大小为 5 的数组。你的代码可能会工作,但一个好的编译器总是会出错。

原因是当你声明一个数组时,你实际上创建了一个指向数组第一个元素的指针。然后,根据大小为这个数组保留一些内存区域。如果您尝试访问这些内存区域之外的元素,您可能会遇到垃圾值。

Here 是您在 ideone 中的代码。

【讨论】:

    猜你喜欢
    • 2021-12-15
    • 2020-10-16
    • 2017-07-16
    • 1970-01-01
    • 2019-04-24
    • 1970-01-01
    • 2016-08-15
    • 2021-11-02
    相关资源
    最近更新 更多