使用 Xcode 在 C Bubblesort 中对相同函数的错误访问

Bad Access in C Bubblesort for same functions using Xcode

我正在使用 Xcode 学习 C,所以我一直在练习冒泡排序算法。 您可以在此处看到我的代码(失败)作为 bubbleSort1 函数和 bubbleSort2 传递。

#include <stdio.h>

void swap(int *a, int *b){
    int temp = *a;
    *a = *b;
    *b= temp;
}

void bubbleSort1(int arr[], int n)
{
    int i, j;
    for (i = 0; i < n-1; i++)


        for (j = 0; i < n-i-1; j++)
            if(arr[j] > arr[j+1])
                swap(&arr[j], &arr[j+1]);
}

void bubbleSort2(int arr[], int n)
{
    int i, j;
    for (i = 0; i < n-1; i++)

        // Last i elements are already in place
        for (j = 0; j < n-i-1; j++)
            if (arr[j] > arr[j+1])
                swap(&arr[j], &arr[j+1]);
}

void printArray(int arr[], int size){
    printf("Array:\t");
    for(int i=0; i<size;i++){
        printf("%d ", arr[i]);
    }
    puts("\n");
}

int main(){

    int array2[8] = {9, 15, 7, 4, 1, 11, 3, 4};
    int length2 = sizeof(array2)/sizeof(array2[0]);
    printArray(array2,length2);
    bubbleSort2(array2,length2);
    printArray(array2, length2);

    int array1[8] = {9, 15, 7, 4, 1, 11, 3, 4};
    int length1 = sizeof(array1)/sizeof(array1[0]);
    printArray(array1,length1);
    bubbleSort1(array1,length1);
    printArray(array1, length1);

    return 0;
}

从代码中可以看出,bubbleSort1 和 bubbleSort2 几乎相同,除了注释行。

然而,当 运行 宁我的代码时,我有一些奇怪的 "Bad Access" 错误,并且 XCode 调试器一直告诉我 bubblesort1 中的 j 是 667,并且第 24 行有错误. 您可以在此处查看快照:

在图像中您可以看到 bubbleSort2 运行s 没有问题,尽管与 bubbleSort1 相同。

当 运行 每个函数单独运行时,也会发生同样的错误。

这是 Xcode 错误吗?或者考虑到我刚刚开始学习 C,我是否遗漏了什么?

bubbleSort1 有一个不正确的 for 循环。

for (j = 0; i < n-i-1; j++) 应该是 for (j = 0; j < n-i-1; j++)

如下更改此功能

void bubbleSort1(int arr[], int n)
{
    int i, j;
    for (i = 0; i < n-1; i++)
        for (j = 0; j < n-i-1; j++) // it's j not i
            if(arr[j] > arr[j+1])
                swap(&arr[j], &arr[j+1]);
}

输出:

Array:  9 15 7 4 1 11 3 4 

Array:  1 3 4 4 7 9 11 15 

Array:  9 15 7 4 1 11 3 4 

Array:  1 3 4 4 7 9 11 15