首页 > 解决方案 > 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;
}

标签: c++sortingselection-sort

解决方案


您在 处有一个逻辑错误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++

正如评论中所建议的,尝试使用调试器。


推荐阅读