如何包装posix_memalign(在mac上编译旧的代码库)?

时间:2012-08-01 18:26:52

标签: c++ macos malloc posix

我正在尝试在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意外!:)

谢谢

2 个答案:

答案 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;
}