[英]How to wrap posix_memalign (to compile an old codebase on mac)?
我正在尝试在Mac上编译工具包。 它具有对malloc.h的memalign函数的引用,但是我可以为mac找到的唯一关闭函数是posix_memalign。 所以我试图包装posix_memalign看起来像memalign。
我对如何执行此操作感到有些困惑(由于void *和void **指针):
posix_memalign的签名是
int posix_memalign(void **memptr, size_t alignment, size_t size);
memalign的签名是:
void *memalign(size_t blocksize, size_t bytes);
任何指针,不胜感激。 (me脚意外!:)
谢谢
就像是:
void *memalign(size_t blocksize, size_t bytes) {
void *result=0;
posix_memalign(&result, blocksize, bytes);
return result;
}
&result
将使您无法使用void**
来调用posix_memalign
,然后您可以像memalign一样返回结果。
需要注意的一点是:这与行为不完全匹配-memalign通过errno
返回错误,但是posix_memalign
将它们作为int
返回,并且没有碰到errno
。 您应该看到仍然可以正确地处理错误。
因此,正确处理错误:
void *memalign(size_t blocksize, size_t bytes)
{
void *m;
errno = posix_memalign(&m, blocksize, bytes);
return errno ? NULL : m;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.