崩溃不明白为什么

时间:2015-12-31 01:31:41

标签: c arrays pointers crash

int procurarMatriculaLista(tipoEspera listaDeEspera[], int ClistaDeEspera, char matricula[])
{
     int i, pos= -1;
     for(i = 0; i<ClistaDeEspera; i++)
     {
         printf("coock");
         if(strcmp(listaDeEspera[i].matricula, matricula) == 0)
         {
             pos=i;
             i=ClistaDeEspera;
         }
     }
     return pos;
}
  

它没有错误,但只要我调用此函数,程序就会崩溃。为什么呢?

1 个答案:

答案 0 :(得分:3)

如果它在该函数中崩溃,最可能的原因是赋予strcmp的参数导致它失败。例如,如果它们实际上不是C风格的字符串,或者您传入的长度值(ClistaDeEspera)对于实际数组来说太大了。

因此,您需要检查listaDeEspera[i].matricula i范围从0ClistaDeEspera - 1的范围,以及matricula

很可能其中一个值不是您认为的那样。

顺便说一句,通过摆脱store-position-and-force-loop-end方面,你的代码可以变得“更干净”。使用这样的一小段代码,多个返回点对可读性没有实际的不利影响:

int procurarMatriculaLista(tipoEspera listaDeEspera[], int ClistaDeEspera, char matricula[]) {
    for (int i = 0; i < ClistaDeEspera; i++)
        if (strcmp (listaDeEspera[i].matricula, matricula) == 0)
            return i;
    return -1;
}