C-在'之后的代码;如果';(并且在';内部,而';)不执行

C-在'之后的代码;如果';(并且在';内部,而';)不执行,c,if-statement,while-loop,linked-list,C,If Statement,While Loop,Linked List,关于这个问题的一些背景知识,我有一个带有名字的链表,我不想在其中找到用户输入的名字。为了方便起见,我将名称(如果找到)复制到同一缓冲区,如下所示: aux = filtCountriesHead; //head of my list while (aux != NULL){ if (strstr(aux->data.name, buffer) != NULL){ strcpy(buffer, aux->data.name); foundNam

关于这个问题的一些背景知识,我有一个带有名字的链表,我不想在其中找到用户输入的名字。为了方便起见,我将名称(如果找到)复制到同一缓冲区,如下所示:

  aux = filtCountriesHead;  //head of my list
  while (aux != NULL){
    if (strstr(aux->data.name, buffer) != NULL){
      strcpy(buffer, aux->data.name);
      foundName = 1;
      break;
    } 
      aux = aux->next;  //this is skipped for some reason
  }
当我运行它时,它会进入一个无限循环,因为它不会执行aux=aux->next行,这是我在调试器中运行时发现的。它不会在“如果”中执行任何操作(即使它执行了,“中断;”也会使它退出循环,而不是再次运行),所以我完全没有主意了。有人有解释吗


提前谢谢

如果没有更多的数据,例如对
aux
值的观察,就无法确定核心问题。但这里有一个可能的解释


如果您观察到一个无限循环,其中
aux=aux->next似乎什么也不做,这意味着
aux->next
等于
aux
,即
aux
指向自身。通常,链表的尾部指向
NULL


当然,循环列表结构需要在其他地方固定,因为列表不是在提供的代码中创建的。

除非您创建一个列表来向我们展示,否则我们很难帮助您。也许任务已经完成,但是你的链接有问题吗?单步执行调试器时,
aux
的值是多少?
aux->next
的值是多少?您是否打印了列表以确保其正确性?这里的代码看起来没问题,所以根据您描述的行为,列表中必须有一个循环或其他内容。您可能有一个指向自身的节点。尝试在每次迭代中打印出
aux
aux->next
(即内存地址),在某个时候它们可能是相同的。相反,您希望在某个点看到
aux->next
为0(
NULL
),您应该在调试时观察
aux
,它看起来是否有效,即指向具有合理外观值和合理外观vfpt的对象?还是保持不变?无论哪种方式,
aux->next
都可能没有设置为您期望的值。“我知道一个事实”著名的最后一句话。