2012-03-08 7 views
-1

push_backへの呼び出しが失敗するコードがあります。 mdbは私に次の手がかりを与えます。ベクトルのpush_backが失敗し、mallocがさらにメモリを割り当てられません

:: 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__Iallocate6MI_p1_ + 0x20の〜== rnc_JO **アロケータ:: を割り当てる:: 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 ==空ベクトル::一back :: DEM __1cIallocate4CpnGrnc_JO__6FipTA_3_ + 0x2a __1cIallocate4CpnGrnc_JO__6FipTA_3_ + 0x2a == __type_0 *割り当てる :: DEM __1cGvector4CpnGrnc_JO__Jpush_back6Mrk1_v_ +の0x4E __1cGvector4CpnGrnc_JO__Jpush_back6Mrk1_v_ +の0x4E ==空ベクトル:: push_back`

私はいけません知っているこれはどのように修正することができますか?実際にはベクトルサイズよりも大きい割り当て空間があることを私は知っています。その領域が利用されると、すべてのデータを第2の場所に再割当てしてコピーする。

ベクトルmacx_sizeは非常に大きな値で、私はあまりにも多くの値を挿入していないので、これは私のコードでは失敗しないはずです。 私に知らせることができますあなたは何のためにデバッグする必要がありますか?

+2

メモリリークや破損をチェックするために 'valgrind'や他のツールを使用しましたか? –

+0

"' macx_size'は非常に大きな値です。私は非常に多くの値を挿入していないので、これは私のコードでは失敗しません。 "max_sizeの値は、最小ではなくベクトルが保持できる要素の最大数です。最小限であれば、確かにそれらを保持できることを意味します。最大値を取ることは、確実にそれ以上の値を保持することはできません。そのサイズに達する前に失敗する可能性があります。 –

+0

コードは何ですか? – mahmood

答えて

1

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

  • アプリケーションのメモリ使用量が増加し続ける場合、おそらくメモリリークが発生します。
  • アプリケーションに必要な空きメモリが少ない場合は、リソースに問題があります。
0

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

関連する問題