Das Thema ist hier allgemeines Ressourcenhandling in C. Das kann Speicherplatz für ein Array sein, aber das gilt auch allgemein.
Was man in solchen Fällen normalerweise macht, ist, dass der Aufrufer der Funktion ein passend großes Array (oder allgemein die passenden Ressourcen) übergibt. Damit erschlägt man erst einmal 50% aller Fälle auf zufriedenstellende Weise.
Schwieriger wird es, wenn der Aufrufer vorher nicht wissen kann, wie groß das Array sein muss oder welche Art von Ressourcen er zur Verfügung stellen muss. Dann definiert man sich einen Handler, dessen Aufbewahrung und richtige Handhabung dem Anwender überlassen wird. Der Anwender muss den Handler immer zwischen den Funktionen hin und her reichen, die die Ressource benutzen. Und das ist dann auch recht elegant. Eine Umsetzung davon, die jeder kennt, ist das Dateihandling in C: Der Anwender kann unmöglich eine Dateiressource selber erstellen, stattdessen hat er einen FILE-Pointer als Handler, den er von fopen mit Inhalt befüllen lässt, immer zwischen den ganzen firgendwas-Funktionen herreicht, und schließlich mit fclose entsorgt.