在某些设备和AIX中的compile选项中释放posix_mealigent后立即发生sigsegov
sigsegv occured when posix_memalign immediately after free in some devices and compile option in AIX
我被分配给一个指针,它立即空闲,但sigsegov的出现取决于一些设备和xlc选项。
xlC_r-o cc.o c.c-lhm发生sigsegov,但xlC_r/o cc.o c.c有效。
(lhm选项正在链接libhm.a-libhu.a.)
(malloc和free有效。只有posix_memalign和free-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 : %dn", sPtr, sRet );
free(sPtr);
printf( "after freen" );
return 0;
}
它起作用:
aix7.1 tl3 IBM XL C/C++for AIX,V12.1(5765-J02、5725-C72)版本:12.01.000.0000
aix6.1 tl9 IBM XL C/C++for AIX,V10.1版本:10.01.000.0008
结果是:
after malloc : 22000000 return : 0
after free
但是
aix6.1 tl3 IBM XL C/C++for AIX,V10.1版本:10.01.000.0008
aix5.3 tl9 IBM XL C/CC++for AIX,V10.1版本:10.01.00 0.0000
aix5.3 tl1 C for AIX 6.0.0.0版本:10.01.000.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中搜索了一个错误报告,但找不到。
不可能同时删除posix_memalign和lhm选项
您知道变通方法或如何解决吗?
libhm和libhmd是调试内存管理库。他们通过在malloc之后保留额外的信息来检测错误,然后在释放之前检查块之前是否没有被释放,以及它是通过malloc分配的。这些库不处理posix_meagn,也不为其保留额外的信息。因此,当您在posix_meign之后调用free时,它们认为您试图释放未正确分配的内存。也就是说,我不记得这会导致分割错误,而是误报错误信息。(我更习惯libhmd而不是libhm。)
这些库已不再维护。例如,请参见XLF编译器手册页。官方建议使用AIX的本机调试malloc工具。
- POSIX open() 挂在 SMB 共享上
- C/C++:POSIX 兼容方式查找默认网络接口上/下
- 使用Boost async_read和POSIX::stream_descriptor从键盘读取
- 没有信号处理程序的POSIX定时器的目的是什么?
- 在目标计算机上访问 POSIX 信号灯时出现可执行文件崩溃(SEGV_MAPERR)
- 强大的 rwlock 在 posix
- 父进程和子进程之间的 POSIX 信号量
- POSIX C/C++日志文件(VEX V5 Brain)
- 适用于win32、linux、mac的POSIX C包装器
- POSIX 条件变量和互斥体"竞争"
- 如何在C++中挂起和恢复 POSIX 线程?
- 线程SCHED_RR Posix 计时器使用的是 100% CPU
- Posix 线程类和启动例程 (pthread)
- 从串行端口(POSIX)读取十六进制值
- 有没有一个 posix lstatat 调用这样的事情
- 为 posix recv 设置超时会导致 udp 数据包丢失吗?
- 用于 64 位/32 位 IPC 的 POSIX 信号量的替代方案?
- 当多个进程使用该段时,Posix 共享内存使用 mremap 调整大小
- POSIX(C )参数类型不匹配
- POSIX 的问题。线程无法正常工作