| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
Lore
Registrado: 08 Ago 2004 Mensajes: 6
| Publicado: 01/09/2004 10:37 am | | | Título: Duda:( |
| Hola, estoy haciendo un programa en C++, en el que tengo dos arrays de char, por lo tanto los tengo definidos asi: char *nombre, char *apellidos. En el constructor de esa clase yo paso dos arrays de tipo char, que a su vez son const. Construyo los arrays de char con el tamaño de los arrays correspondiente que se pasan como parámetro, y se las asigno a esos atributos globales que tengo(nombre, y apellidos). El problema que es que al hacer el destructor hago: Persona::~Persona(){ delete []nombre; delete []apellidos; } Y me da error de ejecucion en el delete []nombre. No lo entiendo. Me podeis ayudar? Muchas gracias |
| | Volver arriba | |  | chuidiang
Registrado: 29 Ago 2004 Mensajes: 94
| Publicado: 02/09/2004 8:05 pm | | | Título: |
| ¿Como haces la asignación?
Se bueno. |
| | Volver arriba | |  | kronos

Registrado: 16 Sep 2004 Mensajes: 10
| Publicado: 18/09/2004 5:04 pm | | | Título: |
| | tirame un poco mas de codigo, sobre todo en la funcion que asignas la memoria para esas cadenas |
| | Volver arriba | |  | | K-ySeR
Registrado: 08 May 2004 Mensajes: 7
| Publicado: 23/09/2004 8:50 pm | | | Título: |
| int i,j; char nombre[1]; char apellido[1]; printf ("ingrese nombre"); for i=1;i<=1;i++) { scanf("%s",&nombre[i]); } printf ("ingrese apellido"); for (j=1;j<=1;j++) { scanf("%s",apellido[j]); }
sera asi o no ?? |
| | Volver arriba | |  | kronos

Registrado: 16 Sep 2004 Mensajes: 10
| Publicado: 23/09/2004 9:32 pm | | | Título: |
| Espero que tu pregunta sea respondida con esto....de esta forma yo resuelvo lo que tu me dices en C.
| Código: | char *nombre; char *apellido;
printf("Ingrese Nombre: "); gets(nombre);
printf("Ingresa Apellido: "); gets(apellido);
printf("Hola %s, %s",apellido, nombre);
getch();
|
el problema con el destructor se debe a que nunca tu has asignado memoria a nombre, por eso es que no hay nada para liberar, y por ello el error.
Suerte!. |
| | Volver arriba | |  | chuidiang
Registrado: 29 Ago 2004 Mensajes: 94
| Publicado: 24/09/2004 8:17 pm | | | Título: |
| Hay varios temas:
char nombre[1]
reserva espacio para un nombre de una sola letra. No creo que valga para lo que pretendes. Deberías poner
char mombre [100]
o un tamaño adecuado, así el nombre puede tener hasta 100 caracteres (en realidad 99 porque al final del nombre C/C++ mete un caracter cero para indicar el final de cadena.
En cuanto a los arrays, en C/C++ el primer indice de array es el 0. con esa declaración, puedes hacer nombre[0], nombre[1]... nombre[99]. Por ello, tu bucle está un poco mal. En vez de for (i=1; i<=1; ...) debes poner for (i=0; i<1; ...)
Y finalmente, en cuanto al scanf(), nombre ya es un puntero, no necesitas ponerle el & (todos los arrays se tratan como punteros)
scanf ("%s", nombre);
Si además, como parece que quieres hacer, es declarar un array de nombres (no solo uno de 100 caractares), debes usar un array doble
char nombre [10][100]
Esto te da 10 nombres de 100 caracteres cada uno.
| Código: | char nombre[10][100]; int i; for (i=0; <10; i++) scanf ("%s", nombre[i]);
|
Y otro detalle más. Si declaras
char nombre[1];
no debes hacer delete. Supongo que ese es el error que te sale. Sólo se hace delete cuando se hace new previamente. Por ejemplo, en el código de Kronos, creo que debería reservarse primero el espacio de memoria para almacenar el nombre y al final, cuando no se use, liberarlo.
| Cita: | char *nombre; nombre = new char[100]; gets (nombre); .... delete [] nombre;
|
Se bueno |
| | Volver arriba | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |