unless a C consumer will be free'ing this pointer, in which case definitely use malloc