新手求教,这段代码为什么能通过编译但一运行就崩溃?
#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;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
能编译不代表运行就没问题,ok?
目测有
第13行grade[i] 的i是多大?如果你compile-time 不能确定array size那最好用malloc/free。
max/min返回的int一定比grade数组的size大,然后printf会做成非法内存访问,依执行环境不同,可能崩溃或打印垃圾
main函数中数组name,code,grade定义有问题吧。c中定义数组必须是常量表达式(有些编译器扩展了,可以用变量),但是你的i和n都没有初始化。另外,max和min函数,你要先判断grade是否是NULL。
数据大小如果要自己输入的话,是需要自己用malloc开辟空间的,不能这么直接定义