排序超过 15 个元素时会出现错误"Abort trap: 6"
error "Abort trap: 6" comes when sorting more elements than 15
我得到一个错误中止陷阱: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
元素时使用它们。
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- Project Euler问题4的错误解决方案
- 我的字符计数代码计算错误.为什么
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- C++中链表的错误"Abort signal from abort(3) (sigabrt) "
- 程序在VS2017上以"abort() has been called"错误结束
- 如何调试错误消息"abort() has been called"?
- 调试错误R6010-已调用abort()
- 调试错误r6010已在C++中调用Abort
- 排序超过 15 个元素时会出现错误"Abort trap: 6"
- 我的程序得到一个abort()错误,但我不能调试它,因为它是程序的一个加载部分