Se hai un vettore di char * e usi la malloc per allocare lo spazio a cui questi puntano sicuramente non funzionerà, dato che la memoria fornita dalla malloc è locale al processo corrente (il medesimo indirizzo in un altro processo non è valido o punta ad altra roba). Ma se tu hai dichiarato effettivamente la memoria condivisa come m[MAX-UTENTI][MAX-CHAR-NAME] teoricamente non ti dovrebbe neanche essere possibile scrivere m[i]=malloc(...), dato che è tutto un unico array, e in tal caso dovrebbe bastare la strcpy per copiarci dentro le stringhe.