no variable-length array. must use pointer + malloc