我被分配到一个指针,它立即是免费的,但是,在某些设备和XLC选项出现SIGSEGV。
xlC_r -o cc.o C.C -lhm已SIGSEGV发生,但xlC_r -o cc.o C.C作品。
(LHM选项联的libc.a libhu.an。) (malloc和free的作品。只有posix_memalign和自由发生SIGSEGV)。
源代码:
#include<stdlib.h>
#include<stdio.h>
int main()
{
void * sPtr = NULL;
size_t sAlign = 8388608;
size_t sSize = 8388648;
int sRet = 0;
sRet = posix_memalign(&sPtr, sAlign, sSize);
printf( "after malloc : %p return : %d\n", sPtr, sRet );
free(sPtr);
printf( "after free\n" );
return 0;
}
有用:
AIX7.1 TL3 IBM XL C / C ++用于AIX,V12.1(5765-J02,5725-C72)版本:12.01.0000.0000 AIX6.1 TL9 IBM XL C / C ++用于AIX,V10.1版本:10.01.0000.0008
结果是:
after malloc : 22000000 return : 0
after free
但
AIX6.1 TL3 IBM XL C / C ++用于AIX,V10.1版本:10.01.0000.0008 AIX5.3 TL9 IBM XL C / C ++用于AIX,V10.1版本:10.01.0000.0000 为AIX版本6.0.0.0版本AIX5.3 TL1 C:10.01.0000.0000
结果是
after malloc : 22000000 return : 0
Segmentation fault (core dumped)
% dbx cc.o core
Type 'help' for help.
[using memory image in core]
reading symbolic information ...
Segmentation fault in _ufree at 0xd3c0fcc4 ($t1)
0xd3c0fcc4 (_ufree+0x44) 80be0000 lwz r5,0x0(r30)
(dbx) where
_ufree(??) at 0xd3c0fcc4
cbase.free(??) at 0xd2b7c048
main(), line 16 in "c.c"
虽然我一直在努力了一个多星期我还没有解决这个问题。我搜索了从AIX的bug报告,但我找不到一个。
这是不可能同时删除posix_memalign和LHM选项。 你知道解决方法或如何解决呢?
libhm和libhmd正在调试的内存管理库。他们通过的malloc后保持额外的信息,然后该块以前没有被释放之前免费检查,并且它是通过的malloc分配的检测错误。这些库不处理posix_memalign和不保留额外的信息吧。所以,当你posix_memalign后拨打免费的,他们认为你正试图释放不是正确分配内存。这就是说,我不记得,引起分段错误,但假阳性的错误消息。 (我更习惯比libhm到libhmd。)
这些库不再保留。例如,见他们的XLF compiler manual page。官方的建议是使用AIX的本地debug malloc tool代替。