鱼C论坛

 找回密码
 立即注册
查看: 1645|回复: 10

[已解决]链表出现 取访问权限冲突。

[复制链接]
发表于 2020-5-28 22:33:40 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 Juniorboy 于 2020-5-28 22:36 编辑
  1. #include <stdio.h>
  2. #include <graphics.h>
  3. #include <windows.h>
  4. #include <mmsystem.h>
  5. #include <time.h>
  6. #include <stdlib.h>
  7. #pragma comment (lib,"winmm.lib")

  8. constexpr auto WINDOWSLENGTH = 640;
  9. constexpr auto WINDOWSHIGHT = 480;


  10. IMAGE background, apple1, apple2;
  11. //字母结构体
  12. typedef struct Letter
  13. {
  14.     //数据域
  15.     int x, y;//字母坐标
  16.     char ch;//字母ASCII码
  17.     //指针域;
  18.     struct Letter* pnext = NULL;
  19. }LETTER;
  20. typedef LETTER* Pt_letter;

  21. //初始化函数
  22. void GameInit()
  23. {
  24.     srand((unsigned int)time(NULL));//随机数种子
  25.     //初始化窗口
  26.     initgraph(WINDOWSLENGTH, WINDOWSHIGHT);
  27.     //初始化背景音乐
  28.     mciSendString(L"open ./AppleGame/3.mp3", 0, 0, 0);
  29.     mciSendString(L"play ./AppleGame/3.mp3", 0, 0, 0);
  30.     //加载图片
  31.     loadimage(&background,L"./AppleGame/0.png", WINDOWSLENGTH, WINDOWSHIGHT);
  32.     loadimage(&apple1, L"./AppleGame/1.png",50,50);
  33.     loadimage(&apple2, L"./AppleGame/2.png",50,50);

  34.     settextstyle(25, 20, L"宋体");
  35.     setbkmode(0);
  36. }
  37. //创建链表头结点
  38. Pt_letter Listinit()
  39. {
  40.     Pt_letter p = (Pt_letter)malloc(sizeof(LETTER));
  41.     if (p == NULL)
  42.     {
  43.         return 0;
  44.     }
  45.     p->pnext = NULL;
  46.     return p;
  47. }
  48. //输出图片
  49. void GamePoint(Pt_letter pletter)
  50. {
  51.     //背景图片
  52.     putimage(0, 0, &background);
  53.     //苹果
  54.     putimage(0, 0, &background);
  55.     //字母
  56.     pletter = pletter->pnext;
  57.     while (pletter != NULL)
  58.     {
  59.         putimage(pletter->x-14, pletter->y-17, &apple1);
  60.         outtextxy(pletter->x, pletter->y, pletter->ch);
  61.         pletter = pletter->pnext;
  62.     }
  63.     //putimage(100, 100, &apple1);//为了测试苹果和字母的关系
  64.     //outtextxy(100+14, 100+17,L"B");
  65. }
  66. //添加链表结点
  67. void AddListNode(Pt_letter pletter)
  68. {
  69.     //为了释放方便,用尾插法
  70.     while (pletter->pnext != NULL)
  71.     {
  72.         pletter = pletter->pnext;
  73.     }
  74.     Pt_letter pnode = (Pt_letter)malloc(sizeof(pnode));
  75.     pnode->x = rand() % 591 + 14;
  76.     pnode->y = 17;
  77.     pnode->ch = rand() % 27 + 'A';
  78.     pnode->pnext = pletter->pnext; //为了让这个结点的pnext指向NULL
  79.         pletter->pnext = pnode; //把头结点和下一个结点相连,从第二次开始,作用就是连接各个结点。

  80. }
  81. int main()
  82. {
  83.     GameInit();
  84.     Pt_letter pletter = Listinit();
  85.     for (int i = 0; i < 10; i++)
  86.     {
  87.         AddListNode(pletter);
  88.     }

  89.    
  90.    
  91.     GamePoint(pletter);

  92.    
  93.     system("pause");
  94.     return 0;
  95. }
复制代码



在62行提醒我  取访问权限冲突,不知道错在哪,求解。
最佳答案
2020-5-29 08:49:15
楼主代码第79行:Pt_letter pnode = (Pt_letter)malloc(sizeof(pnode));
结点大小计算错误(应当是笔误导致的),所以后续访问也就产生了问题;
建议修改:Pt_letter pnode = (Pt_letter)malloc(sizeof(struct Letter));
//sizeof *pnode写法也可等价上述,但是含义不大直观明了;
//sizeof运算符本质是变量计算类型大小;并未涉及到变量值合法性检测。
屏幕截图(3).png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-5-28 23:05:35 | 显示全部楼层

回帖奖励 +1 鱼币

  1. #include <stdio.h>
  2. #include <graphics.h>
  3. #include <windows.h>
  4. #include <mmsystem.h>
  5. #include <time.h>
  6. #include <stdlib.h>

  7. #pragma comment (lib,"winmm.lib")

  8. constexpr auto WINDOWSLENGTH = 640;
  9. constexpr auto WINDOWSHIGHT = 480;


  10. IMAGE background, apple1, apple2;
  11. //字母结构体
  12. typedef struct Letter
  13. {
  14.     //数据域
  15.     int x, y;//字母坐标
  16.     char ch;//字母ASCII码
  17.     //指针域;
  18.     struct Letter *pnext = NULL;
  19. }LETTER;
  20. typedef LETTER *Pt_letter;

  21. //初始化函数
  22. void GameInit()
  23. {
  24.     srand((unsigned int)time(NULL));//随机数种子
  25.     //初始化窗口
  26.     initgraph(WINDOWSLENGTH, WINDOWSHIGHT);
  27.     //初始化背景音乐
  28.     mciSendString("open ./AppleGame/3.mp3", 0, 0, 0);
  29.     mciSendString("play ./AppleGame/3.mp3", 0, 0, 0);
  30.     //加载图片
  31.     loadimage(&background, "./AppleGame/0.png", WINDOWSLENGTH, WINDOWSHIGHT);
  32.     loadimage(&apple1, "./AppleGame/1.png", 50, 50);
  33.     loadimage(&apple2, "./AppleGame/2.png", 50, 50);

  34.     settextstyle(25, 20, "宋体");
  35.     setbkmode(0);
  36. }
  37. //创建链表头结点
  38. Pt_letter Listinit()
  39. {
  40.     Pt_letter p = (Pt_letter)malloc(sizeof(LETTER));
  41.     if(p == NULL)
  42.     {
  43.         return 0;
  44.     }
  45.     p->pnext = NULL;
  46.     return p;
  47. }
  48. //输出图片
  49. void GamePoint(Pt_letter pletter)
  50. {
  51.     //背景图片
  52.     putimage(0, 0, &background);
  53.     //苹果
  54.     putimage(0, 0, &background);
  55.     //字母
  56.     pletter = pletter->pnext;
  57.     while(pletter != NULL)
  58.     {
  59.         putimage(pletter->x - 14, pletter->y - 17, &apple1);
  60.         outtextxy(pletter->x, pletter->y, pletter->ch);
  61.         pletter = pletter->pnext;
  62.     }
  63.     //putimage(100, 100, &apple1);//为了测试苹果和字母的关系
  64.     //outtextxy(100+14, 100+17,L"B");
  65. }
  66. //添加链表结点
  67. void AddListNode(Pt_letter pletter)
  68. {
  69.     //为了释放方便,用尾插法
  70.     while(pletter->pnext != NULL)
  71.     {
  72.         pletter = pletter->pnext;
  73.     }
  74.    
  75.    


  76.     //Pt_letter pnode = (Pt_letter)malloc(sizeof(pnode));
  77.     Pt_letter pnode = (Pt_letter)malloc(sizeof(*pnode));
  78.    



  79.     pnode->x = rand() % 591 + 14;
  80.     pnode->y = 17;
  81.     pnode->ch = rand() % 27 + 'A';
  82.     pnode->pnext = pletter->pnext; //为了让这个结点的pnext指向NULL
  83.     pletter->pnext = pnode; //把头结点和下一个结点相连,从第二次开始,作用就是连接各个结点。

  84. }
  85. int main()
  86. {
  87.     GameInit();
  88.     Pt_letter pletter = Listinit();
  89.     for(int i = 0; i < 10; i++)
  90.     {
  91.         AddListNode(pletter);
  92.     }



  93.     GamePoint(pletter);


  94.     system("pause");
  95.     return 0;
  96. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-5-29 07:29:44 | 显示全部楼层

回帖奖励 +1 鱼币

领育碧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-29 07:55:45 | 显示全部楼层

回帖奖励 +1 鱼币

鱼币
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-5-29 08:49:15 | 显示全部楼层    本楼为最佳答案   

回帖奖励 +1 鱼币

楼主代码第79行:Pt_letter pnode = (Pt_letter)malloc(sizeof(pnode));
结点大小计算错误(应当是笔误导致的),所以后续访问也就产生了问题;
建议修改:Pt_letter pnode = (Pt_letter)malloc(sizeof(struct Letter));
//sizeof *pnode写法也可等价上述,但是含义不大直观明了;
//sizeof运算符本质是变量计算类型大小;并未涉及到变量值合法性检测。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-29 09:32:12 | 显示全部楼层

回帖奖励 +1 鱼币

楼上分析的很有道理
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-29 13:52:46 | 显示全部楼层
CodingCat_k 发表于 2020-5-29 08:49
楼主代码第79行:Pt_letter pnode = (Pt_letter)malloc(sizeof(pnode));
结点大小计算错误(应当是笔误导 ...

我真想再给你5个鱼币,哈哈哈哈,谢谢您了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-29 13:54:12 | 显示全部楼层
CodingCat_k 发表于 2020-5-29 08:49
楼主代码第79行:Pt_letter pnode = (Pt_letter)malloc(sizeof(pnode));
结点大小计算错误(应当是笔误导 ...

我这个音乐也放不出来,您能再给看看吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-29 15:14:44 | 显示全部楼层
Juniorboy 发表于 2020-5-29 13:54
我这个音乐也放不出来,您能再给看看吗

https://blog.csdn.net/qq_4057153 ... earnPai2-3.nonecase
建议先康康这篇博客
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-29 16:03:57 | 显示全部楼层
Juniorboy 发表于 2020-5-29 13:54
我这个音乐也放不出来,您能再给看看吗

不知道API是不是MP3格式不支持,官方给的是wav格式;如果只播放出来了系统默认声音,可以将文件格式改一下试试。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-29 18:48:19 | 显示全部楼层
CodingCat_k 发表于 2020-5-29 15:14
https://blog.csdn.net/qq_40571533/article/details/104393805?utm_medium=distribute.pc_relevant.none ...

发表新帖子了,快去领取鱼币吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-13 02:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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