开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 702|回复: 7
收起左侧

[已解决] 线程_启动_文本型 引起报错读取内存失败程序崩溃

[复制链接]
结帖率:75% (6/8)
发表于 2023-4-23 16:02:21 | 显示全部楼层 |阅读模式   广东省广州市



线程_启动_文本型 (到整数 (&欲执行的子程序), , , 频道ID, 用户ID, , , , , , , , )

相比于python 易语言里的变量只要有下面这个就算定义变量成功 而不需要像python那样每次调用变量前都必须 变量='' ''  也就是 频道ID='' ''
baf70a5f2ad97f0ef779d7af3d79a4fa.png

比如: 欲执行的子程序(频道ID,用户ID) 是不会出错的 即使没写 频道ID='' '' 也会自动定义 频道ID='' ''

但遇到  线程_启动_文本型 (到整数 (&欲执行的子程序), , , 频道ID, 用户ID, , , , , , , , ) 就会出问题了 我曾拆开精益模块看了下 线程_启动_文本型 源码 看不懂 (不好意思我是小白)一开始我以为是 线程_启动_文本型 内部封装了 线程_启动_整数型 (, , , , , , ) 然后通过写到内存传入参数 但实际上不是我也看不懂原理 我只知道 如果传入的参数 频道ID 不存在的话程序会崩溃报错:读取内存失败
‘依照我个人的测试发现 如果前面定义 频道ID='' '' 是不会报错 但问题来了 参数 频道ID 是个变量是个动态值我并不知道它是否为空 如果提前定义为 频道ID='' '' 那还怎么传递其它内容
说的好像有点啰嗦 简单理解是这样: 假设 json.解析(数据) 如果返回 频道ID=json.取文本(“频道ID”) 如果取到了就不会报错 如果没取到 线程_启动_文本型 (到整数 (&欲执行的子程序), , , 频道ID, 用户ID, , , , , , , , ) 就会报错:读取内存频道ID失败   我估摸着是因为 频道ID这个变量参数未定义导致的 也就是 频道ID 必须赋值后才能调用 线程_启动_文本型 ()哪怕是赋值空也没问题 但如果未赋值即使已经如下定义了该变量 但内存里并没有该变量地址的值 这时候 线程_启动_文本型 (频道ID) 就会因为 频道ID 这个变量在内存里不存在 而去读取内存这个变量而报错:读取内存频道ID地址失败崩溃  以我小脑瓜能想到的解决办法就是在  线程_启动_文本型()里调用读取传入的参数内存前先判断该参数变量在内存里是否存在 不存在则跳过不读取或直接定义 频道ID='' ''  但是看了下精益模块里的 线程_启动_文本型()源码 感觉看不懂所以也不知道咋改 所以只能来这里求助了 事实上:用 线程_启动 (, , ) 并不会有此报错 因为传入的参数都是已经明确提前写到内存的并不存在未写入的情况 那么  指针到文本 () 并不会因为读取不到内存而报错 至于我为啥喜欢用  线程_启动_文本型 () 因为简洁直接传入变量参数就行都不需要去读写内存但  线程_启动_文本型 () 会因为传入的变量未被赋值也就是内存里并未写入该变量值导致栈地址引起读取无效内存报错 崩溃程序






点评

多少换几个行吧,求你了   福建省泉州市  发表于 2023-4-23 17:08
结帖率:75% (6/8)

签到天数: 3 天

 楼主| 发表于 2023-4-25 15:08:54 | 显示全部楼层   广东省广州市
linguo 发表于 2023-4-24 10:12
这个没办法,这个问题以前有人提过 然后负责这部分代码的作者提供了修复方法 但还是没用 ...

啥修复方法呢?
回复 支持 反对

使用道具 举报

结帖率:100% (2/2)

签到天数: 24 天

发表于 2023-4-24 10:12:44 | 显示全部楼层   广东省东莞市
千狐 发表于 2023-4-23 22:37
先判断一遍我也想过 就是麻烦 而且 毕竟传入的是动态变量啊 一不注意就漏了  因为动态变量你并不能确定它 ...

这个没办法,这个问题以前有人提过 然后负责这部分代码的作者提供了修复方法 但还是没用
回复 支持 反对

使用道具 举报

结帖率:75% (6/8)

签到天数: 3 天

 楼主| 发表于 2023-4-23 22:37:57 | 显示全部楼层   广东省广州市
linguo 发表于 2023-4-23 20:39
确实有这个bug
所以我现在在这个命令前先判断一下传入的值都有没有 没有就不启动(笨办法,因为我也不会高端 ...

先判断一遍我也想过 就是麻烦 而且 毕竟传入的是动态变量啊 一不注意就漏了  因为动态变量你并不能确定它啥时候就会变成未赋值 那就只能用最笨的办法:自己提醒自己一定要记住所有变量都要先判断一遍 别忘记漏了 因为报错的时候并不会提示是哪行代码导致的 我也是一点一点找了半个月才发现是 线程_启动_文本()有时候传入的动态变量值为空才出现报错:内存读取失败
回复 支持 反对

使用道具 举报

结帖率:100% (2/2)

签到天数: 24 天

发表于 2023-4-23 20:39:42 | 显示全部楼层   广东省东莞市
确实有这个bug
所以我现在在这个命令前先判断一下传入的值都有没有 没有就不启动(笨办法,因为我也不会高端代码)
回复 支持 反对

使用道具 举报

结帖率:100% (18/18)

签到天数: 26 天

发表于 2023-4-23 20:15:34 | 显示全部楼层   福建省泉州市
耐着性子看完了你这叙事逻辑有点乱的内容
应该是你自己用法不对吧    你这应该去发求助帖    而不是发bug反馈
这不是模块命令的bug  而是你用法的问题
回复 支持 反对

使用道具 举报

结帖率:100% (5/5)

签到天数: 25 天

发表于 2023-4-23 17:23:34 | 显示全部楼层   广东省东莞市
为什么不管什么阿猫阿狗什么人动不动就bug了?
回复 支持 反对

使用道具 举报

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

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

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