gpt4 book ai didi

c - 尝试清空c中的堆栈时出现问题

转载 作者:行者123 更新时间:2023-12-02 07:52:34 24 4
gpt4 key购买 nike

(这可能是一件愚蠢的事情但是)我在用 C 语言实现堆栈时遇到问题,当我尝试清空它时,清空堆栈的函数执行无限循环。堆栈的顶部永远不会为空。我在哪里犯了错误?谢谢再见!

#include <stdio.h>
#include <stdlib.h>

typedef struct stack{
size_t a;
struct stack *next;
} stackPos;

typedef stackPos *ptr;

void push(ptr *top, size_t a){
ptr temp;
temp = malloc(sizeof(stackPos));
temp->a = a;
temp->next = *top;
*top = temp;
}

void freeStack(ptr *top){
ptr temp = *top;
while(*top!=NULL){
//the program does an infinite loop
*top = temp->next;
free(temp);
}
}

int main(){
ptr top = NULL;
push(&top, 4);
push(&top, 8);
//down here the problem
freeStack(&top);
return 0;
}

最佳答案

您在循环中每次都在 free()ing 相同的 temp 变量,所以谁知道会发生什么,您还需要更新 temp已更改 top,因此请在循环内更新 temp,例如像这样:

void freeStack(ptr *top){

while(*top!=NULL){
ptr temp = *top;
*top = temp->next;
free(temp);
}
}

关于c - 尝试清空c中的堆栈时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2817194/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com