排序超过 15 个元素时会出现错误"Abort trap: 6"

error "Abort trap: 6" comes when sorting more elements than 15

本文关键字:错误 Abort trap 元素 排序      更新时间:2023-10-16

我得到一个错误中止陷阱:6当我排序超过15个元素(k>15)的数字[]。我使用的是mac os x和代码块12.11。

代码:

#include <iostream>
#include <fstream>
#include <iomanip>
#include <cmath>
using namespace std;
void getdata(int numbers[],int & k);
void sorting(int numbers[], int & k);
int main()
{
    int numbers[10];
    int k;
    getdata(numbers, k);
    sorting(numbers,k);
    for(int i=0; i<k; i++)
        cout<<numbers[i]<<" ";
return 0;
}
void getdata(int numbers[],int & k)
{
    cin>>k;
    for(int i=0; i<k; i++)
    {
        cin>>numbers[i];
    }
}
void sorting(int numbers[],int & k)
{
    int j, temp;
    for(int i=1; i<k; i++)
    {
        j=i;
        while(numbers[j]<numbers[j-1] && j>0)
        {
            temp=numbers[j-1];
            numbers[j-1]=numbers[j];
            numbers[j]=temp;
            j--;
        }
    }
}

第12行:

    int numbers[10];

您只为10个整数保留空间。使用随输入增长的std::vector<int>代替。get_data和排序函数都不需要k参数。vector保存大小。

我得到一个错误中止陷阱:6当我排序超过15数字中的元素(k>15) .

这是因为你的numbers[]只包含10个元素:

int numbers[10];

尝试访问不存在的数组元素是未定义行为。这意味着程序可以做任何事情,包括时不时地以各种方式崩溃,包括你所经历的那种崩溃,或者甚至产生预期的输出,如果碰巧感觉像的话。

你必须知道你想要什么:

  • int s的集合,其大小在编译时是固定的,并且不能增长或缩小?如果是,使用std::array<int, 10>,并确保用户最多可以输入10个数字(例如,如果输入的数字大于10,则退出程序并显示错误消息)。

  • 一个int s的集合,它可以在程序运行时增长?如果是,则在输入std::vector<int>push_back元素时使用它们。