我正在尝试在mac上编译工具包。它引用了malloc.h的memalign函数,但我能找到的唯一关闭函数是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);
任何指针都非常感激。 (Lame pun意外!:)
谢谢
答案 0 :(得分:5)
类似的东西:
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
返回,并且不会触及{{1} }}。你应该确保错误得到妥善处理。
答案 1 :(得分:0)
正确处理错误:
void *memalign(size_t blocksize, size_t bytes)
{
void *m;
errno = posix_memalign(&m, blocksize, bytes);
return errno ? NULL : m;
}