c - 新手求教,这段代码为什么能通过编译但一运行就崩溃?
本文介绍了c - 新手求教,这段代码为什么能通过编译但一运行就崩溃?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
#include <stdio.h>
#define NUM 100
int max(int grade[], int n);
int min(int grade[], int n);
int main(void)
{
int i;
int j;
int n, x, y;
char c;
char code[n][NUM];
char name[n][NUM];
int grade[i];
scanf("%d", &n);
for (i = 0; i != n; i++) {
for (j = 0; ((int)(c = getchar())) != 32; j++) {
name[i][j] = c;
}
for (j = 0; ((int)(c = getchar())) != 32; j++) {
code[i][j] = c;
}
scanf("%d", &grade[i]);
}
x = max(grade, n);
y = min(grade, n);
printf("%s %s\n%s %s\n", name[x], code[x],name[y], code[y]);
return 0;
}
int max(int *grade, int const n)
{
int tmp;
tmp = grade[0];
int i = 1;
int j = 1;
while (i < n) {
if (grade[i] > tmp){
tmp = grade[j];
i ++;
j ++;
}
else {
i ++;
j ++;
}
}
return j;
}
int min(int *grade, int const n)
{
int tmp;
tmp = grade[0];
int i = 1;
int j = 1;
while (i < n) {
if (grade[i] < tmp){
tmp = grade[j];
i++;
j++;
}
else {
i ++;
j ++;
}
}
return j;
}
解决方案
能编译不代表运行就没问题,ok?
目测有
第13行grade[i] 的i是多大?如果你compile-time 不能确定array size那最好用malloc/free。
max/min返回的int一定比grade数组的size大,然后printf会做成非法内存访问,依执行环境不同,可能崩溃或打印垃圾
这篇关于c - 新手求教,这段代码为什么能通过编译但一运行就崩溃?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文