使用 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
我正在使用 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