linkgl escribió:
Y sí a eso me refiero porque reservé un espacio de memoria con malloc pero no se puede liberar tan fácilmente puesto que no es una variable global y si la libero en la función no la puedo retornar, se podría crear una variable global y trabajar con ella todo el programa
Te equivocas, al igual que malloc, realloc y calloc son funciones y sin mencionar a new se pueden todas estas liberar el espacio de memoria que reservaron, sin importar que se retorne por una función después de su llamada, es decir no es necesaria una variable global en ningún caso ya que estas juegan otro papel:
Código: Seleccionar todo
...
char *cadena = NULL;
cadena = acortar(char *str)
cout << cadena << endl;
free(cadena); // delete[] cadena; <- En dado caso que se hallar realizado con new...
....
Otra manera de hacerlo seria esta (la función acortar solo nos retorna el punto final de la cadena, de esta manera podemos hacer la redimencion del bloque de memoria)...
Código: Seleccionar todo
#include <iostream>
using namespace std;
/***
acorta la cadena
Retorna el nuevo punto final de la cadena...
***/
const char *acortar(char *str)
{
char last = '\0';
while (*str) {
if (last == *str) {
for (register int i = 0; str[i] != '\0'; ++i) { // se puede usar memcpy()...
str[i] = str[i + 1];
}
} else {
last = *(str++);
}
}
return str; // Retornamos el nuevo final de la cadena
}
int main()
{
char text[256] = "CREAADDOOOO PPPOOORRRRR Miiiiiiiiiiguuuuuel AAAAAAnggggggel OOOOrtegaaaa Aviillllaaaa";
acortar(text);
cout << text <<endl;
cin.get();
return 0;
}
Dulces Lunas!¡.