【发布时间】:2012-03-25 18:22:25
【问题描述】:
我有一个代码,其中对 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 == 空向量::insert_aux ::dem __1cGvector4CpnGrnc_JO__Jpush_back6Mrk1_v_+0x4e __1cGvector4CpnGrnc_JO__Jpush_back6Mrk1_v_+0x4e == 空向量::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`
我不知道如何纠正?我知道有一个分配的空间实际上大于向量大小。如果该空间被利用,它将重新分配所有数据并将其复制到第二个位置。
我还知道向量macx_size 是一个非常大的值,这对我的代码来说应该不会失败,因为我没有插入这么多值。
你能告诉我我应该调试什么吗?
【问题讨论】:
-
您是否使用
valgrind或其他一些工具来检查内存泄漏或损坏? -
"
macx_size是一个非常大的值,这对我的代码来说应该不会失败,因为我没有插入太多值"max_size的值是向量可以包含的最大元素数坚持,不是最低限度。作为最低限度意味着它可以肯定地持有这些。最大意味着它肯定不能容纳更多;它可能在达到那个大小之前就失败了。 -
@BasileStarynkevitch 不,我没用过
valgrind。我不知道如何使用它。 -
创建一个大约 20 行代码的示例,重现问题。
-
@R. Martinho 我将尝试打印我的向量的 max_size 和当前大小,看看是否达到阈值
标签: c++ vector runtime-error dynamic-allocation