smooth 发表于 2024-3-15 21:12:17

【已解决】while循环中遍历数组元素时该数组维度被消息函数改变而报错

本帖最后由 smooth 于 2024-4-2 10:30 编辑

$aChDrive数组变量用来存储分区列表及分区状态,当消息函数检测到硬件插拔时,会更新该数组变量$aChDrive。
而在while循环中,需要将实时获取的分区列表,与$aChDrive数组函数中存储的分区状态进行对比,以便发现分区状态的改变,如解锁、上锁等。
然而,时常会发生这样的情况:在while中遍历$aChDrive数组中的元素时,由于该数组维度在消息函数_WM_DEVICECHANGE中被改变,进而报错。

我现在解决(暂且说解决,因为没能从根源上解决)的办法是:在每一行用到aChDrive这个数据中的变量的时候,就先判断一下for循环的变量$p是不是大于$aChDrive变量的维度-1,大于则不进入下一行。
说没能从根源上解决的原因是:如果判断for循环的变量$p是不是大于$aChDrive变量的维度-1的时候,判断的那个时点是不大于的,当程序执行到下一句的时候,$aChDrive的维度在消息函数中又被改小了,就报错了。

所有附件资料如下:



haijie1223 发表于 2024-3-20 10:33:57

贴这么长的代码,上传附件多少

smooth 发表于 2024-3-21 16:56:04

haijie1223 发表于 2024-3-20 10:33
贴这么长的代码,上传附件多少

已修改,谢谢发哥指点。

smooth 发表于 2024-4-2 10:30:22

现在从根源上解决问题了。之前数组在windows消息函数中,随着移动设备分区的插入或者移除,一直在改变数组的维度,去循环它的元素,报错是无法避免的。维度之所以发生变化,是因为我使用的是_ArrayAdd和_ArrayDelete这两个函数去增加或者删除数组元素。我固定住数组的维度在26个,具体做法就是模仿这两个函数的功能增加或者删除数组中对应的盘符,但是不改变数组的维度。
页: [1]
查看完整版本: 【已解决】while循环中遍历数组元素时该数组维度被消息函数改变而报错