#include <stdio.h>
void bllo(int arr1[], int len)
{
for (int a = 0; a <= len - 1; a++)
{
for (int b = 0; b <= len - 1 - a; b++)
{
if (arr1[b] > arr1[b + 1])
{
int temp = arr1[b];
arr1[b] = arr1[b + 1];
arr1[b + 1] = temp;
}
}
}
}
int main()
{
int n = 0;
int arr[] = { 9,8,7,6,5,4,3,2,1,0 };
n = sizeof(arr) / sizeof(arr[0]);
bllo(arr, n);
for (int m = 0
不知道怎么回事,运行后是这个
这个错误通常发生在数组越界访问或者栈溢出的情况下。在你的代码中,问题出现在冒泡排序的内循环中,当b
的值等于len - 1 - a
时,你尝试访问arr1[b + 1]
,这对应着数组的越界访问。
解决方法是将内循环的条件修改为b < len - 1 - a
,这样可以避免越界访问。修改后的代码如下:
#include <stdio.h>
void bubbleSort(int arr1[], int len)
{
for (int a = 0; a < len - 1; a++)
{
for (int b = 0; b < len - 1 - a; b++)
{
if (arr1[b] > arr1[b + 1])
{
int temp = arr1[b];
arr1[b] = arr1[b + 1];
arr1[b + 1] = temp;
}
}
}
}
int main()
{
int n = 0;
int arr[] = {9, 8, 7, 6, 5, 4, 3, 2, 1, 0};
n = sizeof(arr) / sizeof(arr[0]);
bubbleSort(arr, n);
for (int m = 0; m < n; m++)
{
printf("%d ", arr[m]);
}
return 0;
}
这样修改后,运行代码不再会出现 "Stack around the variable 'arr' was corrupted." 的错误。代码正常输出已排序的数组。
希望对你有所帮助!如果还有其他问题,请随时提问。
修改如下,改动处见注释,供参考:
#include <stdio.h>
void bllo(int arr1[], int len)
{
for (int a = 0; a < len - 1; a++) //for (int a = 0; a <= len - 1; a++) 修改
{
for (int b = 0; b < len - 1 - a; b++) //for (int b = 0; b <= len - 1 - a; b++) 修改
{
if (arr1[b] > arr1[b + 1])
{
int temp = arr1[b];
arr1[b] = arr1[b + 1];
arr1[b + 1] = temp;
}
}
}
}
int main()
{
int n = 0;
int arr[] = { 9,8,7,6,5,4,3,2,1,0 };
n = sizeof(arr) / sizeof(arr[0]);
bllo(arr, n);
for (int m = 0; m < n; m++)
printf("%d ", arr[m]);
return 0;
}
这个问题你可以试着定义数组的具体大小,你给一个具体数值
而且你的程序里可以加一点优化,比如说n个数只需排n-1轮就可以了