Проблема решена: дело в том, что граница выравнивания должна быть кратна 2 и sizeof(void *)
. Так что, если размер указателя равен 4 байта, второй аргумент должен быть 4, 8, 16 и т. Д. Вместо этого я поставил его как кратное 2, и, следовательно, он падал.
Wrong usage: crashes
posix_memalign(&addr, 2, 8);
Correct usage:
posix_memalign(&addr, 4, 8); // Second argument multiple of void* and 2