我基于ad hoc网络运行模拟,当节点数量很大(100个节点)且模拟时间很长(超过300s)时,我收到以下错误:
模块错误(MobileOverlay) 活动中的MobilePeerNetwork.MobilePeer [73] .overlay.moverlay(id = 3023) #508013243,t = 372.42387824:std :: bad_alloc:std :: bad_alloc。
我想知道是否有办法在不使用Valgrind选项的情况下找到问题的确切位置,因为我在Windows 7中工作。
答案 0 :(得分:2)
您收到此错误是因为在对象创建期间new[]
无法分配请求的存储空间。
因此,您的硬件无法支持您尝试运行的模拟,或者您忘记释放先前分配的内存,因此您的计算机内存不足。
这是一篇有用的帖子:"std::bad_alloc": am I using too much memory?。
基于OMNeT ++指南:
分析支持基于valgrind程序, http://valgrind.org。 Valgrind是一套用于调试和调试的工具 在Linux上进行分析。它可以自动检测各种内存访问 和内存管理错误,并执行您的详细分析 程序。 Valgrind支持由Linux引入OMNeT ++ IDE Eclipse的工具项目,目前处于孵化状态。
因此,最初的建议是切换到Linux机器 - 也许是虚拟机,以完成您的工作。从长远来看,在Linux上使用OMNeT ++将使您受益更多。
显然,您正在寻找一种快速(可能很脏)的解决方案,因此您可以参考:Windows Eclipse CDT profiler