If you know the size in advance that's not the optimal method, though.
Except for that you have two conflicting definitions of x. :-)
struct array *make_str_array( char *x, int size )
^^^^^^^
struct array *x = allocate_array_no_init( size );
^^^^^^^^^^^^^^^