2011-12-07 8 views
-3

で、私は、Linux上でCを使用しています:メモリ破損の私は、エラーの下に取得main.ci実行すると、C

* glibc detected /asde/pasc/source/cl/weasdashanges/webasdnges: malloc(): memory corruption: 0x08069098 **

次のようにGDBからバックトレースがある:そのポインティングは奇妙であるdbloginを機能するように私はので、私は決してそこに変更を加えなかったので、それは問題ではないはずです。

if ((login = dblogin()) == FAIL)  return 0; 

このコードは変更前に正常に機能していました。

(gdb) backtrace 
    #0 0x0012d422 in __kernel_vsyscall() 
    #1 0x002f7651 in raise() from /lib/tls/i686/cmov/libc.so.6 
    #2 0x002faa82 in abort() from /lib/tls/i686/cmov/libc.so.6 
    #3 0x0032e49d in ??() from /lib/tls/i686/cmov/libc.so.6 
    #4 0x00338591 in ??() from /lib/tls/i686/cmov/libc.so.6 
    #5 0x0033b395 in ??() from /lib/tls/i686/cmov/libc.so.6 
    #6 0x0033c70b in calloc() from /lib/tls/i686/cmov/libc.so.6 
    #7 0x001f9cd6 in ??() from /usr/lib/libsybdb.so.5 
    #8 0x001edd1a in dblogin() from /usr/lib/libsybdb.so.5 
    #9 0x0804de13 in ??() 
    #10 0x0804e01b in ??() 
    #11 0x0804bf9f in ??() 
    #12 0x002e3bd6 in __libc_start_main() from /lib/tls/i686/cmov/libc.so.6 
    #13 0x0804a031 in ??() 

どのような問題が特定の問題を見つけることができますか? gdbコマンドのように、その場所へのすべての書き込みを中断するよう指示します。

+4

時計コマンドを使用することができます。 –

+0

@kerek SB私はそれを知っているが、それは私の質問ではない。 valgrindの場合は – PUG

答えて

4

valgrindを使用して、プログラムのメモリリークを調べます。さらにデバッガを使用してください。

あなたが特定の場所が上書きされるかを知りたい場合は、エラーがあなたの*コード*であるgdb

+0

+1です。 (ほぼ確実に)すぐに彼の問題を見つけるでしょう。 –

関連する問題