小花fa 2023-10-20 18:02 采纳率: 50%
浏览 3
已结题

vs链栈释放节点报错堆损坏怎么解决

如题
还有一句报错是CRT检测到应用程序在缓冲区结束后写入内存

img

下面是我的代码
看不出哪错了


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

//定义
typedef struct Linknode{
    int data;
    struct Linknode* next;
}*LiStack;

//初始化
void InitStack(LiStack* S) {
    *S = (LiStack)malloc(sizeof(LiStack));
    (*S)->next = NULL;
}

//判空
int StackEmpty(LiStack S) {
    if (S->next == NULL)
        return 1;
    return 0;
}

//入栈
void Push(LiStack S, int x) {
    LiStack q = (LiStack)malloc(sizeof(LiStack));
    q->data = x;
    q->next = S->next;
    S->next = q;
}

//出栈
int Pop(LiStack S, int* x) {
    if (StackEmpty(S))
        return 0;
    LiStack r = S->next;
    x = r->data;
    S->next = r->next;
    free(r);
    return 1;
}

//打印链栈
void PrintStack(LiStack S) {
    LiStack r = S->next;
    while (r) {
        printf("%d -> ", r->data);
        r = r->next;
    }
    printf("NULL");
}

void main() {
    LiStack S;
    int x;
    InitStack(&S);
    for (int i = 1; i < 6; i++) {
        Push(S, i);
        printf("%d入栈完成\n", i);
    }
    printf("出栈顺序:");
    for (int i = 0; i < 5; i++) {
        Pop(S, &x);
        printf("%d\t", x);
    }
    printf("\n");
    printf("入栈顺序:");
    for (int i = 3; i > 0; i--) {
        Push(S, i);
        printf("%d\t", x);
    }
    printf("\n");
    printf("出栈顺序:");
    for (int i = 0; i < 2; i++) {
        Pop(S, &x);
        printf("%d\t", x);
    }
    printf("\n");
    printf("入栈顺序:");
    for (int i = 4; i < 8; i++) {
        Push(S, i);
        printf("%d\t", x);
    }
    printf("\n");
    printf("出栈顺序:");
    for (int i = 0; i < 5; i++) {
        Pop(S, &x);
        printf("%d\t", x);
    }
    printf("\n");
}
  • 写回答

2条回答 默认 最新

  • 浪客 2023-10-20 18:16
    关注

    37行*x = r->data;
    sizeof里的类型也不对
    入栈的printf里x改为i

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月28日
  • 已采纳回答 10月20日
  • 创建了问题 10月20日