Seem strange to use VLAs and multiple malloc() allocations - and not checking for success (that- that is unsafe).
When able, use restrict. When Compiler can assume refenced data does not overlap, it and so allows for potential optimizations. It also lets the user to know data should not overlap. As is, x and result could overlap and code works correctly. Yet I suspect later code re-org may not support that. Do you really want the user to be allowed to provide overlapped data?
fft() uses unsigned. size_t is the Goldilocks type for array sizing and indexing. Neither size_t is neither too narrow nor too wide for a general purpose sizing with fft().