elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
29 Mayo 2012, 00:53  


Tema destacado: ¡Aprende hacking con práctica! - WarZone, el wargame de elhacker.net

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  Duda Punteros dentro de estructuras
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Duda Punteros dentro de estructuras  (Leído 1,595 veces)
h0oke


Desconectado Desconectado

Mensajes: 2.058


Coder ~


Ver Perfil WWW
Duda Punteros dentro de estructuras
« en: 27 Julio 2009, 15:46 »

Hola, tengo la siguiente estructura:

Código
struct Persona
{
   char *chrNombre;
   char *chrApellido;
   char *chrTelefono;
   char *chrNacimiento;
}stPersona;

Lo que necesito es almacenar una entrada por consola:

Ejemplo:

Código
std::cin>>stPersona.chrNombre;

Compila, pero luego el compilador(CBs) al correr me da un error de segmentación.

¿Cuál es el error?


En línea
Kasswed
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.202


Andalucía


Ver Perfil
Re: Duda Punteros dentro de estructuras
« Respuesta #1 en: 27 Julio 2009, 15:50 »

Yo lo haría del siguiente modo:

Código
stPersona.chrNombre = new char [50];
cin >> stPersona.chrNombre;
...
...
delete [] stPersona.chrNombre;


En línea

"He who allows himself to be insulted, deserves to be."

Repórtame cualquier falta a las normas del foro por mensaje privado.
h0oke


Desconectado Desconectado

Mensajes: 2.058


Coder ~


Ver Perfil WWW
Re: Duda Punteros dentro de estructuras
« Respuesta #2 en: 27 Julio 2009, 15:55 »

Bien, eso creo que avalaría mi idea de no desperdiciar memoria, ya que después de todo termino con un delete de mi objeto.

Gracias ;)
En línea
Lambda


Desconectado Desconectado

Mensajes: 369



Ver Perfil WWW
Re: Duda Punteros dentro de estructuras
« Respuesta #3 en: 27 Julio 2009, 16:13 »

si siempre vas a usar un tamaño fijo ahorrate el new y declara los arrays al estilo variable[tamaño] en vez de usar new aparte de ganar velocidad no te tendras que preocupar de liberar memoria, mucha gente tiene la costumbre de usar memoria dinamica cuando realmente no se necesita.
En línea

h0oke


Desconectado Desconectado

Mensajes: 2.058


Coder ~


Ver Perfil WWW
Re: Duda Punteros dentro de estructuras
« Respuesta #4 en: 27 Julio 2009, 16:46 »

Lambda, exactamente no se cuanto podría ocupar un usuario al escribir su nombre, pero si se el máximo que le permitiría yo entrar por consola, es por esa razón que he creado punteros. :P
En línea
vertexSymphony


Desconectado Desconectado

Mensajes: 2.156



Ver Perfil WWW
Re: Duda Punteros dentro de estructuras
« Respuesta #5 en: 27 Julio 2009, 18:19 »

@Seuth :

Sí, igualmente usar punteros no es sinónimo de usar memoria eficientemente, son útiles cuando son necesarios ...
yo que vos le agrego un destructor a ese struct que se encargue de liberar los punteros y un constructor que pida una memoria "base" ...
o mejor aún, dejale el manejo de cosas del tipo 'nasty' a la clase std::string que no muerde (ya que andás usando C++) y si de casualidad necesitás el puntero char* ... es tan simple como cadena.c_str() ...

Código
std::string a;
std::getline(std::cin,a);
 

Saludos ~

P.S : un buen link sobre punteros : http://www.codersource.net/c++_dynamic_memory_allocation.aspx
En línea

Mail/PGP/XMPP/D*
Código
gpg --recv-keys --keyserver pgp.mit.edu 0xCD21671D
h0oke


Desconectado Desconectado

Mensajes: 2.058


Coder ~


Ver Perfil WWW
Re: Duda Punteros dentro de estructuras
« Respuesta #6 en: 27 Julio 2009, 18:33 »

Alex gracias, por el momento este es mi grado de "eficiencia", ya iré mejorando el code, todavía soy novato.

En cuanto a la clase string, no la utilizo por practicar punteros :P.
En línea
vertexSymphony


Desconectado Desconectado

Mensajes: 2.156



Ver Perfil WWW
Re: Duda Punteros dentro de estructuras
« Respuesta #7 en: 27 Julio 2009, 18:40 »

y que tal la práctica de escribirte tu propia clase string ?  :D

Saludos ~

P.S : esto es ya rre contra rre offtopic xD
En línea

Mail/PGP/XMPP/D*
Código
gpg --recv-keys --keyserver pgp.mit.edu 0xCD21671D
h0oke


Desconectado Desconectado

Mensajes: 2.058


Coder ~


Ver Perfil WWW
Re: Duda Punteros dentro de estructuras
« Respuesta #8 en: 27 Julio 2009, 18:45 »

Citar
P.S : esto es ya rre contra rre offtopic xD

Todavía no, está en el tema principal porque sería una manera de mejorarlo.
 
Tendría que conocer un poco más sobre como funciona esta clase :P
En línea
DarkItachi


Desconectado Desconectado

Mensajes: 511


Itachi Uchiha


Ver Perfil
Re: Duda Punteros dentro de estructuras
« Respuesta #9 en: 27 Julio 2009, 18:48 »

Citar
P.S : esto es ya rre contra rre offtopic xD

Todavía no, está en el tema principal porque sería una manera de mejorarlo.
 
Tendría que conocer un poco más sobre como funciona esta clase :P

Me atrevería a decir que es un typedef con alguna que otra funcion xD.
En línea

Come to me when you have these eyes...

By more that you try it, a feather never will achieve to fly.
vertexSymphony


Desconectado Desconectado

Mensajes: 2.156



Ver Perfil WWW
Re: Duda Punteros dentro de estructuras
« Respuesta #10 en: 27 Julio 2009, 23:29 »

si, si mal no recuerdo era un typedef de basic_string<char,char_traits<char>,allocator<char> >  (lo de char es por que podés usar por ejemplo wchar_t para unicode)

podrías hacer una clase con o sin template para char o wchar_t, obviá el asunto del allocator y a lo sumo podrías copiarle la interface ...
podrías hacer algo así :

Código
class myString
{
public:
/////////////////
void append(const char* str)
{
if (str)
{
int len = strlen(str);
_data = (char*) realloc(_data,strlen(str)+_strlen);
_strlen+=len;
strcat(_data,str);
}
}
/////////////////
myString(const char* str): _strlen(1),_data(0)
{
append(str);
}
/////////////////
myString():_strlen(1),_data(0){}
/////////////////
size_t length(){
return _strlen;
}
/////////////////
char* c_str(){
return _data;
}
/////////////////
~myString(){
if (_data) free(_data);
}
/////////////////
    inline myString& operator+=(const char* str){
append(str);
return *this;
}
/////////////////
inline myString& operator+=(myString& str){return this->operator+=(str.c_str());}
inline myString& operator=(const char* str){return this->operator+=(str);}
/////////////////
private:
size_t _strlen;
char* _data;
};
 

y se podría testear así :

Código
int main()
{
myString a,b("como estas ?");
a = "Hola ";
a+=b;
a+="\n";
std::cout << a.c_str();
}
 

eso sería algo básico, sin soporte de wchar_t, sin allocator, sin ... emhh, se entiende xD
lo suficientemente incompleto como para que el ejemplo funcione bien xP

Saludos ~
En línea

Mail/PGP/XMPP/D*
Código
gpg --recv-keys --keyserver pgp.mit.edu 0xCD21671D
h0oke


Desconectado Desconectado

Mensajes: 2.058


Coder ~


Ver Perfil WWW
Re: Duda Punteros dentro de estructuras
« Respuesta #11 en: 27 Julio 2009, 23:38 »

Muchas gracias por el ejemplo, apenas termine mi "Agenda" comenzaré a investigar, sobre todo la parte de templates ya que hasta ahora no los he usado.
En línea
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda programa con estructuras de control
Programación C/C++
jamatbar 14 532 Último mensaje 11 Noviembre 2011, 12:05
por jamatbar
estructuras punteros programacion c
Programación C/C++
adexrn 4 363 Último mensaje 9 Abril 2012, 10:10
por adexrn
Duda con punteros
Programación C/C++
cazagavilan 5 275 Último mensaje 14 Abril 2012, 05:47
por cazagavilan
Duda: ¿Como especificar parámetros dentro de estructuras de una función?
ASM
.:UND3R:. 2 169 Último mensaje 13 Mayo 2012, 18:53
por .:UND3R:.
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines