ошибка выполнения массива выборки

0

Это мой первый раз здесь. Я действительно надеюсь, что кто-нибудь сможет мне помочь. Так что это моя проблема. Я продолжаю получать ошибку времени выполнения # 2 о поврежденном "arr". Но программа работает нормально до конца. Я не могу понять.

Это мой код:

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

}
  • 1
    Вы объявляете массив размером 3 и используете его для хранения 5 элементов.
  • 0
    Как сказал Нед. Вы должны объявить константы, чтобы убедиться, что вы последовательны. Что-то вроде const int ARRAY_SIZE = 5; int arr1[ARRAY_SIZE]; ... for (int i = 0; i < ARRAY_SIZE; i++) ...
Теги:
selection-sort

1 ответ

0

Попробуйте это:

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

}

Он правильно компилируется без каких-либо ошибок. Ошибка, которую вы сделали, заключается в объявлении размера массива. Если вы хотите сохранить 5 в puts, вам нужно объявить массив размером 5. Ваш код может работать, но хороший компилятор всегда выдаст ошибку.

Причина в том, что когда вы объявляете массив, вы фактически создаете указатель на первый элемент массива. А затем некоторые регионы памяти сохраняются для этого массива в зависимости от размера. Если вы попытаетесь получить доступ к элементу, находящемуся за пределами этих областей памяти, вы можете столкнуться с количеством мусора.

Вот ваш код в идеоне.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню