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

use*_*607 4 c++ malloc macos 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); 
Run Code Online (Sandbox Code Playgroud)

而memalign的签名是:

void *memalign(size_t blocksize, size_t bytes);
Run Code Online (Sandbox Code Playgroud)

任何指针都非常赞赏.(拉扯双关语意外!:)

谢谢

Fle*_*exo 5

就像是:

void *memalign(size_t blocksize, size_t bytes) {
  void *result=0;
  posix_memalign(&result, blocksize, bytes);
  return result;
}
Run Code Online (Sandbox Code Playgroud)

&result将让你void**打电话posix_memalign用,然后根据memalign可没有你可以返回结果.

需要注意的一点是:这与行为不完全匹配 - memalign返回错误通过errno,但posix_memalign将它们作为一个返回int并且不会触及errno.你应该看到它仍然以某种方式妥善处理错误.