Code Bye

崩溃了,完全不知道怎么回事



#include<stdio.h>
int main()
{
int a[10];
int i,j,swap=0;
a[10] = 0;
for (i = 0; i <= 9; i++)
{
printf(“请输入a[%d]:”, i);
scanf(“%d”, &a[i]);
}
    for (i = 8; i >=0; i–)
for (j = 0; j <= i;j++)
{
if (a[j] > a[j + 1])
{
swap=a[j];
a[j]=a[j+1];
a[j+1]=swap;
}
}
for (i = 0; i <= 9; i++)
printf(“a[%d]=%d\n”, i, a[i]);
    return 0;
}

解决方案

10

#include<stdio.h>
int main()
{
	int a[10];
	int i,j,swap=0;
	/*a[10] = 0;//只有0-9是有效能用的下标,这里a[10]等于0是啥意思?直接删掉就能过*/
	for (i = 0; i <= 9; i++)
	{
		printf("请输入a[%d]:", i);
		scanf("%d", &a[i]);
	}
	for (i = 8; i >=0; i--)
		for (j = 0; j <= i;j++)
		{
			if (a[j] > a[j + 1])
			{
				swap=a[j];
				a[j]=a[j+1];
				a[j+1]=swap;
			}
		}
		for (i = 0; i <= 9; i++)
			printf("a[%d]=%d\n", i, a[i]);
		return 0;
}

5

删除a[10] = 0;这一句,其他没问题

5

崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止
判断能否越界访问,可以在数组的最后一个元素之后对应的地址处设置数据读写断点。假如该地址对应其它变量干扰判断,可将数组多声明一个元素,并设置数据读写断点在该多出元素对应的地址上。
#include <time.h>
#include <stdlib.h>
#include <windows.h>
int main() {
    int a,b[11];//本来是b[10],为判断哪句越界,故意声明为b[11]
    srand((unsigned int)time(NULL));//按两次F11,等黄色右箭头指向本行时,调试、新建断点、新建数据断点,地址:&b[10],字节计数:4,确定。
    while (1) {//按F5,会停在下面某句,此时a的值为10,b[10]已经被修改为对应0..4之一。
        b[(a=rand()%11)]=0;
        Sleep(100);
        b[(a=rand()%11)]=1;
        Sleep(100);
        b[(a=rand()%11)]=2;
        Sleep(100);
        b[(a=rand()%11)]=3;
        Sleep(100);
        b[(a=rand()%11)]=4;
        Sleep(100);
    }
    return 0;
}

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明崩溃了,完全不知道怎么回事