递归火山软件开发平台

标题: 莫名的数组错识闪退问题,修改了后不会闪退了,看回事 [打印本页]

作者: jcos    时间: 昨天 03:01
标题: 莫名的数组错识闪退问题,修改了后不会闪退了,看回事
本帖最后由 jcos 于 2026-2-26 03:06 编辑

做了一个中间件,平时测试时我会断开中间件的网,再测看看能不能返回无法访问的错误,也是正常。
但是用在项目中时,却闪退,检查了项目代码也找不到问题...

不过好在ide有提示,之后拿给ai修改后,就正常了

错误提示

运行时校验失败("D:\voldp25\plugins\vprj_win\classlib\sys\base\libs\win_base\include\vol_array.h", 95): IsIndexValid (npIndex)
被调试程序已经退出,退出码为0xC0000005.

反正我也不懂,用了ai修改后的,确实不闪崩了,望大神修复下,在下版本中更新上,谢谢。
以下是修改后的代码核心防崩溃)

                    

                        

                           

                           
正在渲染火山代码...

                        

                    

                    复制代码
               

作者: fengyishen    时间: 昨天 03:47
数组越界问题应该由用户编写代码的时候校验的。易语言数组越界就是会直接崩,老吴应该不会改这个习惯。不然,对于新手用户不友好,很难排查到问题代码。
作者: 创世魂    时间: 昨天 08:02
这是自己代码的问题,数组越界了。

需要自己在访问数组的时候自己做好检查工作。
作者: jcos    时间: 昨天 09:21
在数组加入成员前用了删除全部成员,之后循环加入成员。 应该是别的地方刚巧又访问了被删的成员造成。只是想不通,在启动多线程前,只是按钮按下时的一次初始化,之后才启动的多线程。所以也不是很确定为啥会越界....纳闷。
作者: Xelloss0618    时间: 昨天 10:46
jcos 发表于 2026-2-26 09:21
在数组加入成员前用了删除全部成员,之后循环加入成员。 应该是别的地方刚巧又访问了被删的成员造成。只是 ...

数组是不会改的,这都是你代码逻辑上的问题,多线程下就得加锁
作者: myadmin    时间: 昨天 13:05
啊,难不成我的也是这问题?完全跟你说的一模一样,我也找不到数组变量的来源。
https://bbs.voldp.com/thread-28671-1-1.html
作者: Xelloss0618    时间: 昨天 13:37
myadmin 发表于 2026-2-26 13:05
啊,难不成我的也是这问题?完全跟你说的一模一样,我也找不到数组变量的来源。
https://bbs.voldp.com/thr ...

火山的数组没有严重bug,会闪退都是你们自己代码的问题,找不到问题只是你水平不够,或者错误在你引用的模块里。

再说一下,楼主用AI修改后的代码,虽然越界后取成员不会崩了,但取出来的值是错误的,这样你的程序也变得没有逻辑可言。
作者: jcos    时间: 昨天 13:57
Xelloss0618 发表于 2026-2-26 10:46
数组是不会改的,这都是你代码逻辑上的问题,多线程下就得加锁

都加锁的,多线程,实际都加锁成为单线程差不多了,就是上传那个位置不加锁,别的都是锁了
作者: myadmin    时间: 昨天 14:15
Xelloss0618 发表于 2026-2-26 13:37
火山的数组没有严重bug,会闪退都是你们自己代码的问题,找不到问题只是你水平不够,或者错误在你引用的 ...

我也加了锁的,但他们都说我肯定是哪里漏锁了,就是找不到报错的位置。代码再三检查过,就是没发现哪里有漏锁的。我头都大了。
作者: 高山!&流水    时间: 昨天 14:44
既然都多线程了,是不是直接把数据写到单独内存中,然后通过参数传递,在使用完成最后释放
作者: 199    时间: 昨天 14:47
myadmin 发表于 2026-2-26 14:15
我也加了锁的,但他们都说我肯定是哪里漏锁了,就是找不到报错的位置。代码再三检查过,就是没发现哪里有 ...

养成习惯,所有读数组的操作前要先判断成员是否存在,就不会出现这个问题了
作者: Xelloss0618    时间: 昨天 16:16
jcos 发表于 2026-2-26 13:57
都加锁的,多线程,实际都加锁成为单线程差不多了,就是上传那个位置不加锁,别的都是锁了 ...

多线程加锁是所有用到这个变量的地方都要上锁,包括主线程
作者: 创世魂    时间: 昨天 21:06
199 发表于 2026-2-26 14:47
养成习惯,所有读数组的操作前要先判断成员是否存在,就不会出现这个问题了 ...

多线程里面这样用没用,必须要加锁。




欢迎光临 递归火山软件开发平台 (https://bbs.voldp.com/) Powered by Discuz! X3.4