Il suggerimento del nostro ottimo Oregon verte su un template simile alla strdup() o funzioni analoghe. La funzione alloca (dinamicamente, o da un pool preallocato in heap) un buffer delle dimensioni desiderate, vi effettua le operazioni previste, e infine ne restituisce al chiamante il puntatore.
Vantaggi: quasi nulli. Si evita il passaggio del puntatore come parametro e si elimina la remotissima possibilità di errore legata al misutilizzo di un puntatore a memoria non scrivibile.
Svantaggi: notevoli. Quasi tutte le norme di stile deprecano la restituzione di puntatori, vieppiù allocati nel corpo di una funzione
subordinata (che non sia banalmente parte della famiglia *alloc()). Nella maggior parte delle normative si raccomanda la restituzione di un valore booleano che indichi l'eventuale presenza di errori, mentre la restituzione di eventuali valori avviene tramite le metodologie standard: variabili static a livello di modulo o applicativo, passaggio di puntatori, stack o heap appositi.
La robustezza delle funzioni, in casi come quello qui discusso, è strutturalmente legata alla prevenzione dell'uso di puntatori NULL. Da notare che tutti i migliori RTOS mettono a disposizione apposite API per la verifica dei permessi inerenti il segmento/pagina di memoria referenziato da un dato puntatore, data l'enorme varietà architetturale dei sistemi embedded (un attributo di pagina può anche essere modificato a runtime, ma su taluni tipi di memoria ROM la scrittura è fisicamente impossibile). Tali informazioni sono ottenibili, in modo maggiormente laborioso, anche sui SO mainstream.