2011-08-18 51 views
0

我的程序成功加载了一个库(dlopen(...,RTLD_GLOBAL | RTLD_NOW);)。在库内部,我有一个调用malloc()函数的函数。当我尝试分配一小段内存(例如120字节)时,该功能运行良好。但是,如果我试图让更多的(例如,1024个字节),我的应用程序将像一个长篇报告死亡:动态模块中的内存分配问题

*** glibc detected *** /home/darkamateur/NetBeansProjects/PureServer/dist/Debug/GNU-Linux-x86/pureserver: corrupted double-linked list: 0x00000000006267d0 *** 
======= Backtrace: ========= 
/lib64/libc.so.6(+0x731fd)[0x7ffff76d81fd] 
/lib64/libc.so.6(+0x7363d)[0x7ffff76d863d] 
/lib64/libc.so.6(+0x75994)[0x7ffff76da994] 
/lib64/libc.so.6(__libc_malloc+0x62)[0x7ffff76dcfc2] 
./libs/omps.blob(systemRun+0x12)[0x7ffff71cd9be] 
/home/darkamateur/NetBeansProjects/PureServer/dist/Debug/GNU-Linux-x86/pureserver[0x401f48] 
/lib64/libc.so.6(__libc_start_main+0xec)[0x7ffff7683d4c] 
/home/darkamateur/NetBeansProjects/PureServer/dist/Debug/GNU-Linux-x86/pureserver[0x400fa9] 

没有任何数据交换,共享变量,线程等。

在主应用程序和动态库中的内存分配之间是否存在一些不同?

+0

我怀疑你在捣毁'malloc'使用的内部簿记。 – cnicutar

回答

0

可能与动态库无关 - 你在某处破坏内存。 valgrind是你的朋友

+0

不幸的是,我的朋友不能使用Linux 3.0 –

+0

这似乎很奇怪 - valgrind没有任何强大的内核版本依赖关系,所以应该适用于所有版本的linux。 –