【问题标题】:Crash with no idea why不知道为什么崩溃
【发布时间】:2015-12-31 01:31:41
【问题描述】:
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;
}

它没有错误,但是每当我调用这个函数时我的程序就会崩溃。为什么?

【问题讨论】:

  • 您对 ClistaDeEspera 应用了什么价值?
  • 我不是以英语为母语的人,所以我可能没有正确理解你的问题,但我根本没有改变 ClistaDeEspera 的价值。如果您要问的话,它总是 0 或更大。
  • 你为什么不尝试在es.stackoverflow.com发帖?

标签: c arrays pointers crash


【解决方案1】:

如果它在该函数中崩溃,最可能的原因是提供给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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多