- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我被分配到一个指针,它立即空闲,但 sigsegv 发生取决于某些设备和 xlc 选项。
xlC_r -o cc.o c.c -lhm 发生了 sigsegv,但 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 : %d\n", sPtr, sRet );
free(sPtr);
printf( "after free\n" );
return 0;
}
有效:
aix7.1 tl3 IBM XL C/C++ for AIX,V12.1(5765-J02、5725-C72)版本:12.01.0000.0000
aix6.1 tl9 IBM XL C/C++ for AIX,V10.1 版本:10.01.0000.0008
结果是:
after malloc : 22000000 return : 0
after free
但是
aix6.1 tl3 IBM XL C/C++ for AIX,V10.1 版本:10.01.0000.0008
aix5.3 tl9 IBM XL C/C++ for AIX,V10.1 版本:10.01.0000.0000
aix5.3 tl1 C 用于 AIX 版本 6.0.0.0版本: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 的错误报告,但找不到。
不可能同时删除 posix_memalign 和 lhm 选项。
您知道解决方法或解决方法吗?
最佳答案
libhm 和 libhmd 是调试内存管理库。他们通过在 malloc 之后保留额外的信息来检测错误,然后在释放之前检查该 block 之前没有被释放并且它是通过 malloc 分配的。这些库不处理 posix_memalign 并且不为其保留额外信息。因此,当您在 posix_memalign 之后调用 free 时,他们认为您正在尝试释放未正确分配的内存。也就是说,我不记得会导致段错误,而是误报错误消息。 (我更习惯 libhmd 而不是 libhm。)
不再维护这些库。参见例如 XLF compiler manual page为他们。官方推荐使用AIX原生的debug malloc tool相反。
关于c++ - sigsegv 发生在 posix_memalign 在某些设备和 AIX 中的编译选项后立即释放时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54641936/
我正在努力寻找如何正确使用 pread 和 pwrite。在本例中,我尝试使用 pread 仅读取 256 个字节。但是,无论何时我尝试读取少于 512 字节的 pread 都不会返回任何内容。我相信
我在 posix_memalign 中遇到此异常。知道为什么我们会得到它吗? 提前致谢。 最佳答案 中断的系统调用通常是系统调用被中断的结果。换句话说,进程在执行调用时正在接收信号。 关于c - po
posix_memalign 捕获信号吗?我使用 posix_memalign 分配内存并在后台运行计时器,我从日志中的 posix_memalign 收到“系统调用中断异常”。 是因为定时器信号吗?
在下面的代码中,是否需要释放allocated_memory2和allocated_memory3?你认为这段代码没有内存泄漏吗? class data { public: data();
我正在使用 posix_memalign 来获取一些内存对齐内存。 手册页 说 大小必须是2的幂 和 sizeof(void*) 的倍数 我试过这个调用看看会发生什么 void* ptrs; in
我正在尝试决定是否应该使用 memalign() 而不是 malloc(),因为对齐内存会使我的工作更轻松。我在这里阅读了 GNU 文档 ( http://www.gnu.org/software/l
我在 ubuntu 15.04 上使用 GCC 4.9。我在 Eclipse CDT 中编码。这是一个 C 程序,方言设置为 c99。出于某种原因,我的编译器一直警告我这个...... warning
我正在开发一种使用平铺的高速缓存高效转置算法,我注意到当我使用 malloc 分配内存时,我获得的性能比使用 posix_memalign 时更差。更具体地说: 使用 malloc:98.7 毫秒 使
我现在面临着 posix_memalign 的问题,这可能是由我大脑中关于指针和变量的一个大结引起的。我已经有一段时间没有使用 C 语言了,需要再次找到我的方法。 我正在尝试使用 posix_mema
int posix_memalign(void **memptr, size_t alignment, size_t size); 分配 size 字节,按 alignment 对齐。成功返回 0,失
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: When do we need to use posix_memalign instead of mallo
我阅读了一些有关缓存未命中优化的内容,并了解了这个 stdlib 函数。它会进行某种内存对齐以进行优化,但是 any1 可以帮我解释一下这个函数的真正作用吗?它需要 3 个参数:void* * mem
我试图了解 memalign() 和 posix_memalign() 的功能。阅读可用的文档没有帮助。 有人可以帮我了解它的工作原理和用途吗?或者,也许提供一个使用示例? 我正在尝试了解 linux
我是 Android 项目的新手。对于我的新任务,我需要为 Android 平台构建一个项目。我能够使用 Android ndk 使用 cmakelists.txt 为 Android 成功生成 ma
如何posix_memalign对齐大小为 4096 字节与 mmap 不同?它在内部使用 mmap 还是其他一些机制? 最佳答案 posix_memalign 是比 mmap 更高级别的 API,旨
有没有办法在不先创建 vector 的本地实例的情况下对 std::vector 进行 posix_memalign?我遇到的问题是我需要告诉posix_memalign分配多少空间,我不知道怎么说
我目前正在尝试在 Windows 中构建 word2vec。但是 posix_memalign() 函数有问题。大家都建议用_aligned_malloc(),只是参数个数不一样。那么 Windows
似乎 posix_memalign 让您选择自定义的对齐方式,但什么时候需要这样做? malloc内部已经做好了对齐工作。 更新 我问这个的确切原因是因为我看到 nginx 这样做,ngx_memal
对齐的malloc是posix_memalign,没问题,但是对齐的realloc呢? realloc 是否保留对齐方式或如何确保重新分配的内存具有相同的对齐方式?假设 Linux 和 x86_64。
如果我传递了一个内存位置,我正在尝试弄清楚如何初始化一个结构,下面的情况是我正在尝试做的,但它抛出缩短为相关代码的“无效初始化程序” #ifndef PAGE_ALLOC_H #define PAGE
我是一名优秀的程序员,十分优秀!