2011-02-04 12 views
5

私はちょうどCPPコードを書いて、ubuntuでG ++を使ってコンパイルしました。 私は私のコードのすべてがうまくている実行すると、コードがうまく動作し、出力を与えるが終了していないと、それは、このエラーを与える:私はこのエラーが発生します: "glibcが検出されました"

 
*** glibc detected *** ./a.out: free(): invalid next size (fast): 0x09f931f0 *** 
======= Backtrace: ========= 
/lib/libc.so.6(+0x6c501)[0x3de501] 
/lib/libc.so.6(+0x6dd70)[0x3dfd70] 
/lib/libc.so.6(cfree+0x6d)[0x3e2e5d] 
/usr/lib/libstdc++.so.6(_ZdlPv+0x21)[0x6e2441] 
./a.out[0x8049ce6] 
/lib/libc.so.6(+0x2f69e)[0x3a169e] 
/lib/libc.so.6(+0x2f70f)[0x3a170f] 
/lib/libc.so.6(__libc_start_main+0xef)[0x388cef] 
./a.out[0x8048a61] 
======= Memory map: ======== 
00219000-0021a000 r-xp 00000000 00:00 0   [vdso] 
00354000-00370000 r-xp 00000000 08:01 8781845 /lib/ld-2.12.1.so 
00370000-00371000 r--p 0001b000 08:01 8781845 /lib/ld-2.12.1.so 
00371000-00372000 rw-p 0001c000 08:01 8781845 /lib/ld-2.12.1.so 
00372000-004c9000 r-xp 00000000 08:01 8781869 /lib/libc-2.12.1.so 
004c9000-004ca000 ---p 00157000 08:01 8781869 /lib/libc-2.12.1.so 
004ca000-004cc000 r--p 00157000 08:01 8781869 /lib/libc-2.12.1.so 
004cc000-004cd000 rw-p 00159000 08:01 8781869 /lib/libc-2.12.1.so 
004cd000-004d0000 rw-p 00000000 00:00 0 
00638000-00717000 r-xp 00000000 08:01 3935829 /usr/lib/libstdc++.so.6.0.14 
00717000-0071b000 r--p 000de000 08:01 3935829 /usr/lib/libstdc++.so.6.0.14 
0071b000-0071c000 rw-p 000e2000 08:01 3935829 /usr/lib/libstdc++.so.6.0.14 
0071c000-00723000 rw-p 00000000 00:00 0 
00909000-0092d000 r-xp 00000000 08:01 8781918 /lib/libm-2.12.1.so 
0092d000-0092e000 r--p 00023000 08:01 8781918 /lib/libm-2.12.1.so 
0092e000-0092f000 rw-p 00024000 08:01 8781918 /lib/libm-2.12.1.so 
00fdb000-00ff5000 r-xp 00000000 08:01 8781903 /lib/libgcc_s.so.1 
00ff5000-00ff6000 r--p 00019000 08:01 8781903 /lib/libgcc_s.so.1 
00ff6000-00ff7000 rw-p 0001a000 08:01 8781903 /lib/libgcc_s.so.1 
08048000-0804b000 r-xp 00000000 08:01 8652645 /home/akg/Desktop/contest/a.out 
0804b000-0804c000 r--p 00002000 08:01 8652645 /home/akg/Desktop/contest/a.out 
0804c000-0804d000 rw-p 00003000 08:01 8652645 /home/akg/Desktop/contest/a.out 
09f93000-09fb4000 rw-p 00000000 00:00 0   [heap] 
b7600000-b7621000 rw-p 00000000 00:00 0 
b7621000-b7700000 ---p 00000000 00:00 0 
b7765000-b7768000 rw-p 00000000 00:00 0 
b7775000-b7779000 rw-p 00000000 00:00 0 
bf9a7000-bf9c8000 rw-p 00000000 00:00 0   [stack] 
Aborted 

これは何を意味するのでしょうか?どうすればそれを取り除くことができますか? 私はmallocを使用していないか、フリーです、私はちょうどベクトルを使用しています!

答えて

14

メモリを直接割り当てていない場合でも、コードはvectorのフードの下で発生し、想定外の場所に書き込むことでメモリの一部が破損する可能性があります。私は考えることができる最も可能性が高い理由は、次のとおりです。

  1. は、もはや有効ではない要素へのポインタ/参照を使用して境界
  2. の外にある要素への書き込み - 複数の要素を挿入すると、無効にすることができることに注意してください以前の参照

もちろん、関連するコードを投稿しない限り、私は確信することはできません。または、valgrindを使用して問題の原因を調べてください。

+4

+1 valgrind - BTW、ここにリンクがあります:http://valgrind.org/ –

5

これは無効なポインタ(つまり、malloc経由で割り当てられていないポインタ、またはすでに解放されているポインタ)でfreeを呼び出したことを意味します。

いくつかのコードを貼り付けます。それ以外の場合は、なぜこのようなことが起こるのかは分かりません。

+3

また、mallocヒープ管理データが破損している可能性があります。 – bdonlan

+0

はい、正しくありません。 – peoro

関連する問題