PUSH_BACKベクトルのバックは、Mallocが追加のメモリを割り当てられないことで失敗します
-
09-12-2019 - |
質問
push_back
への呼び出しが失敗するコードを持っています。 MDBは私に次の手がかりを与えます。
:: DEM Malloc + 0x49~ Malloc + 0x49~== Malloc + 0x49~ :: dem __1ciallocate4cpngrnc_jo__6fipta_3_ + 0x2a~ __1ciallocate4cpngrnc_jo__6fipta_3______0x2a~== __type_0 *割り振り :: DEM __1cjallocator4cpngrnc_jo__ iallocate6mi_p1_ + 0x20~ __1cjallocator4cpngrnc_jo__ + 0x20~== rnc_jo ** Allocator :: Allocate :: DEM __1CGVECTOR4CPNGRNC_JO__KINSERT_AUX6MP1RK1_V_ + 0xAC __1CGVECTOR4CPNGRNC_JO__KINSERT_AUX6MP1RK1_V_ + 0xAC== VOIDベクトル::挿入_aux. :: DEM __1CGVECTOR4CPNGRNC_JO_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 *割り当て :: DEM __1CGVECTOR4CPNGRNC_JO_JO_JPUSH_BACK6MRK1_V_ + 0x4E __1cgvector4cpngrnc_jo__v_ + 0x4e== void vector :: push_back`
私はこれをどのように修正するのかわからないのですか?私がベクトルサイズよりも実際に大きい割り当てスペースがあることを知っていること。そのスペースが利用されている場合は、すべてのデータを再割り当てして2番目の場所にコピーします。
ベクトル
macx_size
が非常に大きな値であることも知っていて、私が非常に多くの値を挿入していないので、コードでは失敗しないでください。 あなたは私がデバッグすることができますか?
解決
チェックする1つの方法は、アプリケーションが使用しているメモリと共にシステム上の空きメモリを監視することです。
- アプリケーションのメモリ使用量が成長し続ける場合は、おそらくメモリリークがあります。
- アプリケーションのニーズよりも空きメモリが少ない場合は、リソースの問題があります。
他のヒント
これはメモリ問題のようです、push_backが呼び出される前にリストが異常であることを疑います。 私の提案は、このリストの操作をステップ別にステップバイステップで減らすことです。どの操作によってリストを異常にする原因となります。