-1

への呼び出しが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 == 空ベクトル::push_back`

どうすれば修正できますか?私が知っていることは、実際にはベクトルサイズよりも大きい割り当てられたスペースがあることです。そのスペースが使用されると、すべてのデータが再割り当てされ、2 番目の場所にコピーされます。

vector は非常に大きな値であることも知っていmacx_sizeますが、これは私のコードでは失敗しないはずです。それほど多くの値を挿入していないからです。何のためにデバッグする必要があるか教えていただけますか?

4

2 に答える 2

1

確認する 1 つの方法は、アプリケーションが使用しているメモリと共に、システムの空きメモリを監視することです。

  • アプリケーションのメモリ使用量が増え続ける場合は、メモリ リークが発生している可能性があります。
  • アプリケーションが必要とするよりも空きメモリが少ない場合は、リソースに問題があります。
于 2012-03-08T08:59:58.473 に答える
0

これはメモリの問題のようです。push_back が呼び出される前にリストが異常であるとは思えません。私の提案は、このリストの操作を段階的に減らして、どの操作がリストを異常にするかを見つけることです。

于 2012-03-08T09:13:08.603 に答える