为什么这个基本的C程序会导致无限循环?

时间:2016-01-24 10:00:05

标签: c linked-list infinite-loop

我的任务是构建一个“代表堆栈”的基本链表。因此,只能根据后进先出主体访问数据。我必须在“堆栈”上应用某些功能。 我的代码编译得很好,但是执行时,它只是无限地打印1。我不知道这是怎么回事,因为我真的只使用一个while循环。 有谁知道我的问题是什么?也许我将来如何防止这样的错误。感谢您的任何帮助。并且道歉,我是初学者!

LEFT|TOP == TOP|LEFT

5 个答案:

答案 0 :(得分:6)

您不会在功能cursor中增加print

    while (cursor!=NULL) {
        printf("%i", cursor->data);
   }

代码也泄漏了内存:

head=malloc(sizeof(Stack));
head=NULL;

答案 1 :(得分:2)

在此代码中:

while (cursor!=NULL) {
    printf("%i", cursor->data);
}

您没有更改光标。所以把它改成

for (cursor = head; cursor!=NULL; cursor = cursor->next) {
    printf("%i", cursor->data);
}

答案 2 :(得分:1)

你在函数print中有一个无限循环。您需要在循环内更新cursor,否则它将永远循环。我就是这样做的:

void print(Stack*head) {    //print complete Stack
    Stack* cursor;

    for (cursor = head; cursor != NULL; cursor = cursor->next) {
        printf("%i", cursor->data);
    }
}

答案 3 :(得分:1)

您必须在功能print中循环前进一步:

void print( Stack*head )
{
    Stack* cursor = head;
    while (cursor != NULL)   // 
    {
        printf("%i", cursor->data);
        cursor = cursor->next; // step one forward
    }
}

此外还有内存泄漏。您为变量head分配内存,但在之后立即将其设置为NULL

Stack* head;
// head=malloc(sizeof(Stack)); // delete this
head=NULL;

答案 4 :(得分:1)

while循环有一个问题:

while (cursor!=NULL) {
    printf("%i", cursor->data);
    cursor = cursor->next; // you forgot this line
}

如果没有这一行,光标将永远不会改变。