2011-08-18 5 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 버전에서 올바르게 작동해야합니다. –