鱼C论坛

 找回密码
 立即注册
查看: 1513|回复: 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
  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. typedef int DataType;

  4. struct Node;
  5. typedef struct Node *PNode;
  6. typedef struct Node *LinkList;
  7. struct Node {
  8.     DataType info;
  9.     PNode link;
  10. };

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

  19. int insertPost_link(LinkList llist, PNode p, DataType x) {
  20.     PNode q = malloc(sizeof(*q)); /*申请新结点*/
  21.     if(q == NULL) {
  22.         printf("Out of Space!\n");
  23.         return 0;
  24.     } else {
  25.         q->info = x;
  26.         //q->link = p->link;      // 谜之操作
  27.         q->link = NULL;
  28.         p->link = q;
  29.         return 1;
  30.     }
  31. }

  32. #if 0
  33. int deleteV_link(LinkList llist, DataType x) {
  34.     PNode p, q;
  35.     p = llist;
  36.     if(p == NULL)
  37.         return 0;
  38.     while(p->link != NULL && p->link->info != x)
  39.         p = p->link;      /*找值为x的结点的前驱结点的存储位置*/
  40.     if(p->link == NULL) { /* 没找到值为x的结点*/
  41.         printf("Not exist!\n ");
  42.         return 0;
  43.     } else {
  44.         q = p->link;       /* 找到值为x的结点*/
  45.         p->link = q->link; /* 删除该结点*/
  46.         free(q);
  47.         return 1;
  48.     }
  49. }
  50. #endif

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

  57. int main(void) {
  58.     LinkList m = createNullList_link();
  59.     //PNode a = malloc(sizeof(*a));
  60.     //m = a;      // 谜之操作
  61.     PNode a = m;
  62.     insertPost_link(m, a, 1);
  63.     PNode temp = m->link;
  64.     while(temp != NULL) {
  65.         printf("%d ", temp->info);
  66.         temp = temp->link;
  67.     }
  68.     free_link(m);
  69.     puts("");
  70.     return 0;
  71. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> 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 | 显示全部楼层    本楼为最佳答案   
  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. typedef int DataType;

  4. struct Node;
  5. typedef struct Node *PNode;
  6. typedef struct Node *LinkList;
  7. struct Node {
  8.     DataType info;
  9.     PNode link;
  10. };

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

  19. int insertPost_link(LinkList llist, PNode p, DataType x) {
  20.     PNode q = malloc(sizeof(*q)); /*申请新结点*/
  21.     if(q == NULL) {
  22.         printf("Out of Space!\n");
  23.         return 0;
  24.     } else {
  25.         q->info = x;
  26.         //q->link = p->link;      // 谜之操作
  27.         q->link = NULL;
  28.         p->link = q;
  29.         return 1;
  30.     }
  31. }

  32. #if 0
  33. int deleteV_link(LinkList llist, DataType x) {
  34.     PNode p, q;
  35.     p = llist;
  36.     if(p == NULL)
  37.         return 0;
  38.     while(p->link != NULL && p->link->info != x)
  39.         p = p->link;      /*找值为x的结点的前驱结点的存储位置*/
  40.     if(p->link == NULL) { /* 没找到值为x的结点*/
  41.         printf("Not exist!\n ");
  42.         return 0;
  43.     } else {
  44.         q = p->link;       /* 找到值为x的结点*/
  45.         p->link = q->link; /* 删除该结点*/
  46.         free(q);
  47.         return 1;
  48.     }
  49. }
  50. #endif

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

  57. int main(void) {
  58.     LinkList m = createNullList_link();
  59.     //PNode a = malloc(sizeof(*a));
  60.     //m = a;      // 谜之操作
  61.     PNode a = m;
  62.     insertPost_link(m, a, 1);
  63.     PNode temp = m->link;
  64.     while(temp != NULL) {
  65.         printf("%d ", temp->info);
  66.         temp = temp->link;
  67.     }
  68.     free_link(m);
  69.     puts("");
  70.     return 0;
  71. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> 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-4-19 20:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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