#include<stdio.h>
int main(void)
{
int array[10] = { 10,2,9,4,5,6,7,8,3,1 };
/*Implementing Bubble Sort */
int temp;
for (int i = 0; i < 9; i++)
{
for (int j = 0; j < 10 - i; j++)
{
if (array[j] > array[j + 1])
{
temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
for (int i = 0; i < 10; i++)
{
printf("%d ", array[i]);
}
}
当我尝试运行该程序时,我正在对值进行排序,但是一个值具有一些垃圾值,并且对话框显示在VS 2019中变量周围的堆栈已损坏。在某些其他编译器中,我在编译器中得到0代替10 。
.loop的内部
for (int j = 0; j < 10 - i; j++)
{
if (array[j] > array[j + 1])
{
temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
调用未定义的行为,因为当j
等于9
用于外循环的第一次迭代是当i
等于0
表达式中的索引array[j + 1]
可以等于10
其导致访问存储器阵列之外。
像这样重写循环
for (int j = 1; j < 10 - i; j++)
{
if (array[j-1] > array[j])
{
temp = array[j-1];
array[j-1] = array[j];
array[j] = temp;
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句