No, no tendrá fugas, ya que se destruye después de que termina getp();
Esto dará como resultado un comportamiento indefinido, porque ahora tiene un puntero a un área de memoria que ya no contiene lo que cree que lo hace, y que puede ser reutilizado por cualquier persona.
Se produciría una pérdida de memoria si almacenó esa matriz en el montón, sin ejecutar una llamada a free().
char* getp(){
char* p = malloc(N);
//do stuff to p
return p;
}
int main(){
char* p = getp();
//free(p) No leak if this line is uncommented
return 0;
}
Aquí, p no se destruye porque no está en la pila, sino en el montón. Sin embargo, una vez que finaliza el programa, la memoria asignada no se ha liberado, lo que provoca una pérdida de memoria (aunque se realice una vez que el proceso se agota).
[ACTUALIZACIÓN]
Si desea devolver un nuevo C-secuencia de una función, tiene dos opciones.
- tienda que en el montón (como el ejemplo encima o como this real example que devuelve una cadena duplicada);
- pasar un parámetro memoria intermedia
por ejemplo:
//doesnt exactly answer your update question, but probably a better idea.
size_t foo (const char* str, size_t strleng, char* newstr);
Aquí, tendríamos que asignar memoria en algún lugar de newstr (podría ser la pila o montón) antes de llamar a la función foo. En este caso particular, devolvería la cantidad de caracteres en newstr.
¿Es necesario asignar 'arr [0] = 'M';' o fue solo para demostrar una operación no trivial en 'arr'? – user1717828
@ user1717828 este último. –