中止陷阱:C ++中的6错误

时间:2016-06-15 01:21:19

标签: c++ arrays

我是编程新手,请原谅我,如果问题听起来微不足道。你的任何建议对我的学习都有很大的帮助。 我正在编写一个大小为10的数组的Selection_Sorting程序。我能够编译程序但是在给出输入后它反映了这个 信息: 排序数组如下:    中止陷阱:6

我的问题是在该程序中查看问题以解决问题,以及出现此问题的原因是什么?

作为参考,我附上了我的代码。

# include <iostream>
void fill_array(int sample_array[10], int size);
void sort(int sample_array[10], int size);
void swap(int &a1, int &a2);
int index_of_smallest(int array[10], int start_index, int size);

int main()
{
    using namespace std;
    int array[10];
    fill_array(array, 10);
    sort(array, 10);
    cout << " The sorted array as follows : \n";
    for (int i = 0; i < 10; i++)
    {
        cout << array[i] << " ";
    }
    return 0;
}

void fill_array(int sample_array[10], int size)
{
    using namespace std;
    for (int index = 0; index< 10; index++)
    {
        cin >> sample_array[index];
    }
}

void swap(int &a1, int &a2)
{
    int temp;
    temp = a1;
    a1 = a2;
    a2 = temp;
}

int index_of_smallest(int array[10], int start_index, int size)
{
    int min = array[start_index];
    int min_index = start_index;
    for (int i = start_index + 1; i< size - 1; i++)
    {
        if (array[i]< min)
        {
            min = array[i];
            min_index = i;
        }
    }
    return min_index;
}

void sort(int sample_array[10], int size)
{
    int next_min_index;
    int j;
    for (j = 0; j < size; j++)
    {
        next_min_index = index_of_smallest(sample_array, j, 10);
    }
    swap(sample_array[j], sample_array[next_min_index]);
}

1 个答案:

答案 0 :(得分:1)

我决定破译最有可能出错的一个函数。我在这里重新格式化它是可读的:

void sort( int sample_array[10], int size )
{
    int next_min_index;
    int j;
    for( j = 0; j < size; j++ )
    {
        next_min_index = index_of_smallest( sample_array, j, 10 );
    }
    swap( sample_array[j], sample_array[next_min_index] );
}

现在,希望你能看到问题。

交换不在循环内部发生。您将j的定义移出了循环范围(可能是为了修复您不理解的编译错误,这会引发您的问题)。

交换发生在j == 10时。这超出了你的数组界限和程序的范围。如果将功能更改为此,则应修复错误:

void sort( int sample_array[10], int size )
{
    for( int j = 0; j < size; j++ )
    {
        int next_min_index = index_of_smallest( sample_array, j, 10 );
        swap( sample_array[j], sample_array[next_min_index] );
    }
}

这可能不是唯一的问题,但我不会破译其余的代码。希望这个解决方案加上一些强烈的鼓励,使用人类可读的代码布局将帮助您顺利完成。