4

我正在尝试在 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);

任何指针都非常感谢。(蹩脚的双关语意外!:)

谢谢

4

2 回答 2

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将它们作为 an 返回int并且不触摸errno。您应该确保仍然以某种方式适当地处理错误。

于 2012-08-01T18:29:07.310 回答
0

所以正确处理错误:

void *memalign(size_t blocksize, size_t bytes)
{
  void *m;
  errno = posix_memalign(&m, blocksize, bytes);
  return errno ? NULL : m;
}
于 2017-07-19T06:17:25.820 回答