Sorry for nudging you again, but I think that this needs to be fixed, because this tutorial is intended for people with little knowledge of XS and C, and memory management is one of the aspects in which Perl differs greatly from C. It's quite easy to imagine someone being too used to reference counting of Perl to think that in C, allocated memory should be manually returned to OS.
Maybe it's just me, bitten by segfaults, memory corruption and leaks almost every time I write in plain C. And tutorial code is inevitably copied without much incentive to change it, since it produces the right output...
And the fix is simple: a free(c_array); inserted between the for (i=0; i<3; i++) {/*...*/} loop (which uses the pointer) and inline_stack_done; (which cleans up at the end of void _arr). A real world library in place of xswrap example would probably document that the pointer returned by unsigned char * arr(void) fully belongs to the user and needs to be freed after use.