Do you happen to know why that was perceived as worse? If I understand correctly the difference would be that you'd have to write (i * sizeof(char)) vs. (sizeof(char[i]))? Personally I'd even prefer the former.
int vla[nparam];
int *pcopyspace = malloc(sizeof vla);
Here sizeof vla is basically just nparam sizeof(int).vla* is evaluated to the extent of calculating its run-time size.