鱼C论坛

 找回密码
 立即注册
查看: 1999|回复: 11

[已解决]引发了未经处理的异常:读取访问权限冲突。求修改解惑

[复制链接]
发表于 2022-9-18 17:15:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 不会代码的菜鱼 于 2022-9-19 20:12 编辑

#include<stdio.h>
#include<stdlib.h>
typedef int  DataType;
struct Node;
typedef struct Node *PNode;
struct Node {
        DataType info;
        PNode link;
};

typedef struct Node* LinkList;
LinkList createNullList_link(void) {
        LinkList llist;
        /*申请表头结点空间*/
        llist = (LinkList)malloc(sizeof(struct Node));
        if (llist != NULL) llist->link = NULL;
        else printf("Out of space!\n"); /*创建失败*/
        return llist;
}
int insertPost_link(LinkList llist, PNode p, DataType x) {
        PNode q = (PNode)malloc(sizeof(struct Node)); /*申请新结点*/
        if (q == NULL) {
                printf("Out of Space!\n");
                return 0;
        }
        else {
                q->info = x;
                q->link = p->link;      引发了未经处理的异常:读取访问权限冲突。      
                p->link = q;
                return 1;
  }                                                                                                                                    
}
int deleteV_link(LinkList llist, DataType x) {
        PNode p, q; p = llist;
        if (p == NULL) return 0;
        while (p->link != NULL && p->link->info != x)
                p = p->link; /*找值为x的结点的前驱结点的存储位置*/
        if (p->link == NULL) { /* 没找到值为x的结点*/
                printf("Not exist!\n "); return 0;
        }
        else {
                q = p->link;/* 找到值为x的结点*/
                p->link = q->link;/* 删除该结点*/
                free(q); return 1;
        }
}
void main(void) {
        LinkList m = createNullList_link();
        PNode a= (PNode)malloc(sizeof(struct Node));
        m = &a;           //主要是将a的地址赋给m
  insertPost_link(m,a,1);
         while(m!= NULL){
                printf("%d", m->info);
                m = m->link;
        }


}

最佳答案
2022-9-19 00:40:59
#include <stdio.h>
#include <stdlib.h>

typedef int DataType;

struct Node;
typedef struct Node *PNode;
typedef struct Node *LinkList;
struct Node {
    DataType info;
    PNode link;
};

LinkList createNullList_link(void) {
    LinkList llist;
    /*申请表头结点空间*/
    llist = malloc(sizeof(*llist));
    if(llist != NULL) llist->link = NULL;
    else printf("Out of space!\n"); /*创建失败*/
    return llist;
}

int insertPost_link(LinkList llist, PNode p, DataType x) {
    PNode q = malloc(sizeof(*q)); /*申请新结点*/
    if(q == NULL) {
        printf("Out of Space!\n");
        return 0;
    } else {
        q->info = x;
        //q->link = p->link;      // 谜之操作
        q->link = NULL;
        p->link = q;
        return 1;
    }
}

#if 0
int deleteV_link(LinkList llist, DataType x) {
    PNode p, q;
    p = llist;
    if(p == NULL)
        return 0;
    while(p->link != NULL && p->link->info != x)
        p = p->link;      /*找值为x的结点的前驱结点的存储位置*/
    if(p->link == NULL) { /* 没找到值为x的结点*/
        printf("Not exist!\n ");
        return 0;
    } else {
        q = p->link;       /* 找到值为x的结点*/
        p->link = q->link; /* 删除该结点*/
        free(q);
        return 1;
    }
}
#endif

// 你是不是忘记写这个函数了?
void free_link(LinkList list) {
    if(!list) return;
    free_link(list->link);
    free(list);
}

int main(void) {
    LinkList m = createNullList_link();
    //PNode a = malloc(sizeof(*a));
    //m = a;      // 谜之操作
    PNode a = m;
    insertPost_link(m, a, 1);
    PNode temp = m->link;
    while(temp != NULL) {
        printf("%d ", temp->info);
        temp = temp->link;
    }
    free_link(m);
    puts("");
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-9-18 20:39:58 | 显示全部楼层
代码太杂乱

m = a; 是什么意思?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-18 23:48:36 From FishC Mobile | 显示全部楼层
能不能按照古代写法:把大括号写到一行语句的下面,一行,只写一句,写清楚?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-19 00:40:59 | 显示全部楼层    本楼为最佳答案   
#include <stdio.h>
#include <stdlib.h>

typedef int DataType;

struct Node;
typedef struct Node *PNode;
typedef struct Node *LinkList;
struct Node {
    DataType info;
    PNode link;
};

LinkList createNullList_link(void) {
    LinkList llist;
    /*申请表头结点空间*/
    llist = malloc(sizeof(*llist));
    if(llist != NULL) llist->link = NULL;
    else printf("Out of space!\n"); /*创建失败*/
    return llist;
}

int insertPost_link(LinkList llist, PNode p, DataType x) {
    PNode q = malloc(sizeof(*q)); /*申请新结点*/
    if(q == NULL) {
        printf("Out of Space!\n");
        return 0;
    } else {
        q->info = x;
        //q->link = p->link;      // 谜之操作
        q->link = NULL;
        p->link = q;
        return 1;
    }
}

#if 0
int deleteV_link(LinkList llist, DataType x) {
    PNode p, q;
    p = llist;
    if(p == NULL)
        return 0;
    while(p->link != NULL && p->link->info != x)
        p = p->link;      /*找值为x的结点的前驱结点的存储位置*/
    if(p->link == NULL) { /* 没找到值为x的结点*/
        printf("Not exist!\n ");
        return 0;
    } else {
        q = p->link;       /* 找到值为x的结点*/
        p->link = q->link; /* 删除该结点*/
        free(q);
        return 1;
    }
}
#endif

// 你是不是忘记写这个函数了?
void free_link(LinkList list) {
    if(!list) return;
    free_link(list->link);
    free(list);
}

int main(void) {
    LinkList m = createNullList_link();
    //PNode a = malloc(sizeof(*a));
    //m = a;      // 谜之操作
    PNode a = m;
    insertPost_link(m, a, 1);
    PNode temp = m->link;
    while(temp != NULL) {
        printf("%d ", temp->info);
        temp = temp->link;
    }
    free_link(m);
    puts("");
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-9-19 17:27:25 | 显示全部楼层
ba21 发表于 2022-9-18 20:39
代码太杂乱

m = a; 是什么意思?

把a的地址赋给m,m是指针
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-9-19 17:33:11 | 显示全部楼层

把q->link设置成null不就不能完成随意位置插入单链表吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-9-19 17:40:55 | 显示全部楼层
howzyao 发表于 2022-9-18 23:48
能不能按照古代写法:把大括号写到一行语句的下面,一行,只写一句,写清楚?

没有太乱吧,都是一行一句
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-9-19 17:52:08 | 显示全部楼层

//q->link = p->link;
确实是这么教的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-19 19:05:19 | 显示全部楼层
不会代码的菜鱼 发表于 2022-9-19 17:33
把q->link设置成null不就不能完成随意位置插入单链表吗

什么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-9-19 20:05:50 | 显示全部楼层
能用是能用,但和教学课件,和网上资源不一样,b站上的也是这么写的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-9-19 20:06:22 | 显示全部楼层


能用是能用,但和教学课件,和网上资源不一样,b站上的也是这么写的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-19 20:19:56 | 显示全部楼层
不会代码的菜鱼 发表于 2022-9-19 20:06
能用是能用,但和教学课件,和网上资源不一样,b站上的也是这么写的

是吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-28 04:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表