2011-12-07 47 views
-3

我用c在linux下,当我运行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我知道,但那不是我的问题。 – PUG

回答

4

使用valgrind可以查找程序中的内存泄漏。还可以使用更多的调试器。

如果您想了解如何覆盖特定的位置,你可以使用的gdb

+0

valgrind +1。它将(几乎肯定)立即发现他的问题。 –