搜索
查看: 1417|回复: 4

一次小错误导致的内存不足报错

[复制链接]

2

主题

22

帖子

126

积分

一级会员

Rank: 2

积分
126
发表于 2016-8-27 08:23:59 | 显示全部楼层 |阅读模式
我有一个程序,外循环近50次,每次循环内有100左右次内循环,都是计算数值,没有其他。
可是到23次外循环,就报“not enough memory”错误!

一开始,我判断:
可能有一个函数需要克隆一个小table。这个函数在最内层被调用。
克隆数组是不是会出现内存不足的情况?
函数调用完毕之后,不是自动销毁吗?
如何实现手工释放内存?

苦恼了一晚上。
       
最后,发现内存不足的原因了,很巧而已。
我错将:
str +=str0
写成:
str += str + str0
导致循环加大时,str呈指数搬增长,超出内存要求而报错。
哈哈!
跟函数调用、clone表等无关。
只是一个低级错误。

当然,我还是不懂如何释放内存之类。谁能提供系统的讲解?
回复

使用道具 举报

8

主题

35

帖子

208

积分

二级会员

Rank: 3Rank: 3

积分
208
发表于 2016-8-27 12:00:57 | 显示全部楼层

aardio 已有自动释放内存制度

aardio 已有自动释放内存制度
回复

使用道具 举报

2

主题

22

帖子

126

积分

一级会员

Rank: 2

积分
126
 楼主| 发表于 2016-8-28 07:46:55 | 显示全部楼层

[quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=72041&ptid=13345][c

xx.sir 发表于 2016-8-27 12:00
aardio 已有自动释放内存制度

谢谢!如果我在程序中想强制回收内存呢?
除了赋值为null之外,还有什么方法?
另外,我如何在程序运行起来后,查看有哪些全局变量?
比如,用debug()可以看到全部局部变量,那么用什么看全局变量?
回复

使用道具 举报

42

主题

128

帖子

923

积分

荣誉会员

Rank: 8Rank: 8

积分
923
发表于 2016-8-28 21:36:10 | 显示全部楼层

把全局变量写到1个名字空间里面就容易查看了 例如 namespace abc{ a = null; b = null;

把全局变量写到1个名字空间里面就容易查看了

例如
namespace abc{
    a = null;
    b = null;
    c = null;
}
回复

使用道具 举报

2

主题

22

帖子

126

积分

一级会员

Rank: 2

积分
126
 楼主| 发表于 2016-8-29 07:23:38 | 显示全部楼层

[quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=72049&ptid=13345][c

cad 发表于 2016-8-28 21:36
把全局变量写到1个名字空间里面就容易查看了

例如

看来只有这个办法了。实质还是改写为局部变量。
回复

使用道具 举报

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

本版积分规则

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2018-10-21 03:54 , Processed in 0.062500 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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