MymyX 2020-05-29 17:13 采纳率: 100%
浏览 289
已采纳

大佬能帮下忙吗? 单链表出现的读取访问权限冲突

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

typedef struct LNode {
    int elem;
    struct LNode* next;
}Node, * List;

List init() {
    List list = (List)malloc(sizeof(Node));
    list->elem = 0;   list->next = NULL;
    return list;
}

int length(List list) {
    return list->elem;
}

bool isEmpty(List list) {
    return list->next == NULL;
}

void add(List list, int elem) {
    Node node = { elem,NULL };
    node.next = list->next;
    list->next = &node;
    list->elem++;
}

void append(List list, int elem) {
    Node node = { elem,NULL };
    List cur = (List)malloc(sizeof(Node));
    cur = list->next;
    while (cur != NULL) {
        cur = cur->next;
    }//结束while语句后,cur是一个nullptr
    cur = &node;
    list->elem++;
}


int* travel(List list) {
    int* num = (int*)malloc(sizeof(int) * length(list));//初始化num数组
    int i = 1;
    if (isEmpty(list)) {
        printf("链表为空!");
        num = NULL;
    }
    else {
        List cur = (List)malloc(sizeof(Node));
        if (!cur) {
            printf("申请内存失败!");
            exit(0);
        }
        cur = list->next;
        while (cur != NULL) {
            printf("链表第%d个节点为:%d\n", i, cur->elem);
            num[i - 1] = cur->elem;
            i++;
            cur = cur->next;
        }
    }
    return num;
}

int main() {
    List list = init();
    add(list, 3);
    add(list, 2);
    add(list, 1);
    append(list, 4);
    printf("链表是否为空:%d\n", isEmpty(list));
    printf("链表长度为:%d\n", length(list));
    travel(list);
    return 0;
}

图片说明

  • 写回答

1条回答 默认 最新

  • bobhuang 2020-05-29 19:35
    关注

    add 函数中node是局部变量,函数结束后对应的变量空间就失效了,会在后续的执行中被篡改。要用malloc申请一个Node变量空间,才能真正add一个有效的Node.
    append函数, cur在malloc赋值后直接赋值成list->next,内存泄漏了。而整个while以cur==NULL结束,没有真正找到append的点,应该以NULL==cur->next 结束。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 关于#python#的问题:自动化测试