精易论坛

标题: 大佬们,小白请教下写到内存会异常的问题 [打印本页]

作者: 真IKUN    时间: 2025-1-19 12:29
标题: 大佬们,小白请教下写到内存会异常的问题
遇见一个很奇葩的事情,大佬们教教我,子程序1写到内存,把指针作为参数给线程,线程拿到指针就读取,释放内存
思路按理来说没问题的,每次都该弹出信息框的,但实际上当子程序1的循环次数超过8k就开始出现异常了,信息框不会弹出(如果子程序1写在类里面程序会直接崩溃)
不调用模块,求个解决办法
  
子程序名返回值类型公开备 注
_按钮1_被单击  
子程序1 ()
子程序名返回值类型公开备 注
子程序1  
变量名类 型静态数组备 注
a文本型 
i整数型 
指针整数型 
a = “这是一条测试数据”
计次循环首 (10000, i)  ' 8k以上会出现崩溃现象
指针 = 申请内存 (500, )  ' 500绝对够的,最长才21字节
写到内存 (a + 到文本 (i) + 字符(0), 指针, )
启动线程 (&线程, 指针, )
计次循环尾 ()
子程序名返回值类型公开备 注
线程  
参数名类 型参考可空数组备 注
指针整数型
变量名类 型静态数组备 注
文本文本型 
文本 = 指针到文本 (指针)
释放内存 (指针)
调试输出 (文本)
如果真 (文本 = “这是一条测试数据10000”)
信息框 (“我运行成功了!”, 0, , )
返回 ()


i支持库列表   支持库注释   
spec特殊功能支持库
EThread多线程支持库



补充内容 (2025-1-19 12:30):
大概率出现问题,如果您第一次没出现那就多运行一两次
作者: 方立广    时间: 2025-1-19 12:29
每个线程默认栈空间1MB,32位程序最大内存空间4GB 其中一部分保留给系统使用,易语言最多也就能用1.7G,实际不到1.5就开始出问题了(如果你开了易语言助手编译插件那么差不多能提到3.7左右)按1.7G算成1741个线程吧(实际根本达不到)。 易语言有垃圾回收机制,它会定期回收不再使用的内存,而不是立即回收 如果只是1万的话,开助手插件编译后是不会出问题的,或者就用鱼刺线程池,线程池大小64kb,容量1000,够用了
作者: chenboss    时间: 2025-1-19 12:40
用线程池控同时线程数,32位程序线程上限1500左右,无节制的启动线程很容易崩溃



参考 通用稳定多线程队列.e

作者: qvbydc    时间: 2025-1-19 15:51
指针 这个变量没有放到程序集下,后面调用释放内存(指针)没有成功,或是只释放第一个




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4