c++ - C++ 中的选择排序(错误:EXC_BAD_ACCESS)
问题描述
我最近才学会对数组进行选择排序。我也在 Mac 上使用 X-Code。我以为我做的一切都是正确的,但我似乎在 if 语句中不断收到此错误消息:
线程 1:EXC_BAD_ACCESS(代码=1,地址=0x7fff5fc00000)。
我究竟做错了什么?
using namespace std;
void selectionSorting(int array[], int n)
{
for(int i = 0; i < n-1; n++)
{
int min = i;
for(int j = i + 1; j < n; j++)
{
if(array[j] < array[min]) //Thread 1: EXC_BAD_ACCESS(code=1, address=0x7fff5fc00000)
min = j;
}
int temp = array[i];
array[i] = array[min];
array[min] = temp;
}
}
int main()
{
int n = 10;
int array[]= {10,9,8,7,6,5,4,3,2,1};
selectionSorting(array, n);
for(int x=0; x < n; x++)
{
cout << array[x] << " ";
}
return 0;
}
解决方案
您在 处有一个逻辑错误for(int i = 0; i < n-1; n++)
。它应该是for(int i = 0; i < n-1; i++)
(遍历数组的元素)。
EXC_BAD_ACCESS 还表明您正在尝试访问一块不再可访问的内存,或者它与预期用途不符。
看到这发生在 处if(array[j] < array[min])
,这很明显,因为 j 超出了您所做的数组长度n++
。
正如评论中所建议的,尝试使用调试器。
推荐阅读
- sql - 从 oracle 12.1 查询具有“。”字段值的 json 数据
- python - matplotlib | 绘制条形上方的值
- javascript - 检查日期在js中是否有效
- flutter - Flutter 应用程序未在清单中找到应用程序
- linux - 将数据从本地 Linux 服务器移动到 AWS 存储(如 S3 存储桶)涉及哪些步骤?
- javascript - 如何通过正则表达式拆分字符串后跟数字和数组中的单位
- sql - ORA-00904: : 无效的标识符 Oracle sql
- android - adb root 有效,但 adb shell su 无效
- swift - 将 SwiftUI 数据源放在其他地方
- python - Numpy 字符串数组,无法转换为浮点数