向量中的push_back失败,malloc无法分配更多内存

时间:2012-03-08 08:32:42

标签: c++ vector runtime-error dynamic-allocation

我有一个代码,其中对push_back的调用失败了。 mdb给了我以下线索。

  

:: dem malloc + 0x49~   malloc + 0x49~ == malloc + 0x49~   :: dem __1cIallocate4CpnGrnc_JO__6FipTA_3_ + 0x2a~   __1cIallocate4CpnGrnc_JO__6FipTA_3_ + 0x2a~ == __type_0 * allocate   :: dem __1cJallocator4CpnGrnc_JO__Iallocate6MI_p1_ + 0x20~   __1cJallocator4CpnGrnc_JO__Iallocate6MI_p1_ + 0x20~ == rnc_JO ** allocator :: allocate   :: dem __1cGvector4CpnGrnc_JO__Kinsert_aux6Mp1rk1_v_ + 0xac   __1cGvector4CpnGrnc_JO__Kinsert_aux6Mp1rk1_v_ + 0xac == void vector :: insert_aux   :: dem __1cGvector4CpnGrnc_JO__Jpush_back6Mrk1_v_ + 0x4e   __1cGvector4CpnGrnc_JO__Jpush_back6Mrk1_v_ + 0x4e == void vector :: push_back   :: dem __1cIallocate4CpnGrnc_JO__6FipTA_3_ + 0x2a   __1cIallocate4CpnGrnc_JO__6FipTA_3_ + 0x2a == __type_0 * allocate   :: dem __1cGvector4CpnGrnc_JO__Jpush_back6Mrk1_v_ + 0x4e   __1cGvector4CpnGrnc_JO__Jpush_back6Mrk1_v_ + 0x4e == void vector :: push_back`

我不知道如何纠正这个问题?我知道有一个分配的空间实际上大于矢量大小。如果使用该空间,它将重新分配并将所有数据复制到第二个位置。

我还知道vector macx_size是一个非常大的值,这对我的代码来说应该不会失败,因为我没有插入这么多的值。 你能让我知道我要调试什么?

2 个答案:

答案 0 :(得分:1)

检查的一种方法是监视系统上的可用内存以及应用程序正在使用的内存。

  • 如果应用程序的内存使用量持续增长,那么您可能会发生内存泄漏。
  • 如果可用内存少于应用程序需要,那么就会出现资源问题。

答案 1 :(得分:0)

这似乎是一个内存问题,我怀疑在调用push_back之前列表是异常的。 我的建议是逐步减少这个列表上的操作,找出哪个操作导致列表异常。