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がしたように結果を返すことができます。

注意すべき1つのポイント:これは動作と完全には一致しません-memalignはを介してエラーを返しますがerrno、エラーをposix_memalignとして返し、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 に答える