c - 段错误 : 11 on c program

标签 c arrays sorting segmentation-fault scanf

在我的代码中:

int nAlunos, nNotas;

/*size input*/

scanf("%d", &nAlunos);

scanf("%d", &nNotas);

/*arrays*/

int ordenador [nAlunos];
char listaNomes [nAlunos][16];
float listaNotas [nAlunos][nNotas+1];

/*non-arrays*/

int i, k;

/*input*/

for(i = 0; i < nAlunos; i++){
    scanf("%s", listaNomes[i]);
    for(k = 1; k <= nNotas; k++){
        scanf("%f", &listaNotas[i][k]);
    }
}


/*sum of grades / number os grades for each person*/

for(i = 0; i < nAlunos; i++){
    listaNotas[i][0] = 0;

    for(k = 1; k <= nNotas; k++)
        listaNotas[i][0] += listaNotas[i][k];

    listaNotas[i][0] /= nNotas;
}


/*process order on vector*/

for(i = 0; i < nAlunos; i++){
    menor = 1111;

    for(k = i; k < nAlunos; k++)
        if (listaNotas[k][0] < menor)
            menor = listaNotas[k][0];

    for(k = i; listaNotas[k][0] != menor; k++){}

    ordenador[k] = i;
    ordenador[i] = k;
}
for(i = 0; i < nAlunos; i++)
    printf("%d", ordenador[i]);

我正在尝试填充来自用户的数据表,我可能不会为此类使用指针。

它需要接收呈现的数据:

String1
float1 float2...
String2
.
.
.

运行它时,它运行良好,直到我完成最后一个输入。之后它只是中断执行并返回段错误:11

我试图找到它可能访问不正确内存的位置,但它对我来说没有意义,因为我找不到它。

最佳答案

for(k = i; listaNotas[k][0] != menor; k++){}

以上语句导致数组越界访问!因此出现了段错误。根据您的功能进行处理。

条件 listaNotas[k][0] != menor 是致命的。

关于c - 段错误 : 11 on c program,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18159763/

相关文章:

Javascript:使用 .sort 和比较函数来查找数组中最长的单词

c - 如何在 C 中比较 char 指针和汽车

c - C : is the manual wrong? 中的目录名()

algorithm - 快速排序 - 最坏情况

javascript - For循环仅将数组的最后一个值分配给事件监听器

java - 在Java中重新排列数组

algorithm - 关于多遍排序算法

c - 非常奇怪的错误***glibc检测到** free()无效指针

c - 如何调用仅根据参数打印出语句的 C 函数

php - MySQL:如何创建在数组索引上使用数组变量执行的查询?