[C con Clase] si, esta bien, stl, ¿es la única manera?

Steven Davidson steven en conclase.net
Mie Ene 17 04:57:36 CET 2007


Hola Sorcerer,

El pasado 2007-01-17 02:01:16, Sorcerer escribió:
 
S> Eso me lleva a otra duda...
S> El compilador reserva memoria ¿dinámica? para la cadena de carácteres ?. O sea, al final del programa debería liberarla con delete[] ?.

Podrías pensar que hace algo parecido a esto. Realmente, la cadena pertenece al programa. Cuando se cargue el programa en memoria, implícitamente se da memoria a esta cadena literal. Consecuentemente, al terminar el programa se libera su memoria, al igual que esta cadena literal.

S> O en el caso de que cambie el valor de ese puntero para que apunte a otra cadena de carácteres, debería liberar la cadena anterior con delete[] ?

Esa cadena literal permanece en memoria, cdomo he explicado anteriormente. Por esta razón, no recomiendo usar punteros a cadenas literales o si no, usar punteros constantes a cadenas constantes.

S> Sobre lo del puntero **p. Claro, si yo pruebo a hacer literalmente algo como:
S> **p = { "Cadena 1", "cadena 2" }
S> el compilador me da error. Pero en la función main ponen *argv[] o **argv, cualquiera de los 2. Entonces pensé que tal vez en casos especiales el compilador si reservaba memoria para el **p.

Bueno, ese segundo parámetro pasado a la función 'main()' no es controlado por el compilador. Desde el punto de vista de 'main()', 'argv' es un parámetro, nada más.

S> Hablando de la función main... también tengo otra duda con eso xD
S> Mhhh, más bien es una observación. Siempre dicen que hay que hacer esto:
S> > main(int argc, char *argv[])
S> y yo he probado cambiando esos nombres, por ejemplo:
S> > main(int holi, char *chau[])
S> y me funciona sin problemas, ni siquiera un warning (uso el Dev-C++).
S> Supongo que esta mal el usar otros nombres, pero por qué?, algún compilador podría dar error ?, o realmente el programa funciona mal y yo no me doy cuenta por probar con ejemplos muy simples ?

Recuerda que 'main()' sigue siendo una función, como cualquier otra, aunque eso sí, es especial. Dicho esto, los nombres de estos dos parámetros no son importante. Si no quieres usar los nombres populares, elige otros que te gusten.


Espero que esto te sirva.

Steven


Más información sobre la lista de distribución Cconclase