Здравствуйте, Mr.Delphist, Вы писали:
MD>или надо как-то по особому удалять выровненный указатель?
Считай, что это отдельное семейство парных функций, подобно уже существующим malloc/free, new/delete и new[]/delete[]. Так если ты выделил память через new[], а освободил через free, то это ошибка в программе и её работоспособность не гарантируется.
MD>Кто сталкивался? Народ в гуглении говорит надо как-то выпендрануто через operator new и operator delete всё делать, но сомнения гложут.
Компилятор сам способен выбрать нужные методы создания и освобождения памяти, если это описать в типе и не мешать.
Например:
struct alignas(1024) S {};
auto* p = new S; // вызовет new с выравниванием
delete p; // вызовет delete с выравниванием
Ты же в своём коде явно указываешь другую функцию выделения памяти, а не ту, которую хочет выбрать компилятор, а потом ещё и теряешь эту информацию. Собственно, если хочется дальше вручную тут этим управлять, то нужно также самому вручную доставить до delete и аргумент align_val_t, который был передан в new при выделении.