【发布时间】:2011-03-07 05:23:12
【问题描述】:
当我查看 gdb 中的回溯时,我的应用程序有时会出现段错误,主要出现在 malloc() 和 malloc_consolidate() 中。
我确认机器有足够的可用内存,它甚至没有开始交换。 我检查了 ulimits 的数据段和最大内存大小,两者都设置为“无限制”。 我还在 valgrind 下运行了应用程序,没有发现任何内存错误。
现在我不知道还有什么可能导致这些段错误。有什么想法吗?
更新: 由于我没有找到任何使用 valgrind(或 ptrcheck)的东西,可能是另一个应用程序正在破坏 libc 的内存结构,还是每个进程都有一个单独的结构?
【问题讨论】:
-
你有没有在 valgrind 下崩溃过?
-
不,它没有崩溃。它是一个实时应用程序,在 valgrind 下我只能对其施加非常轻的负载,而它通常只会在较重的负载下崩溃。
-
这是哪个操作系统?从工具链来看,听起来可能是Linux。在这种情况下,不,其他应用程序不能丢弃您的堆;这是你的应用程序中的东西。如果这只发生在负载下,那当然会变得更加棘手……负载下有什么不同?这怎么会导致您丢弃堆?在 Valgrind 下运行时,尽可能地尝试“折磨”您的应用程序……您如何才能最好地重现负载下存在的条件?也许是无偿分配内存之类的?
标签: c++ debugging malloc segmentation-fault