我有一个代码,其中对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
是一个非常大的值,这对我的代码来说应该不会失败,因为我没有插入这么多的值。
你能让我知道我要调试什么?
答案 0 :(得分:1)
检查的一种方法是监视系统上的可用内存以及应用程序正在使用的内存。
答案 1 :(得分:0)
这似乎是一个内存问题,我怀疑在调用push_back之前列表是异常的。 我的建议是逐步减少这个列表上的操作,找出哪个操作导致列表异常。