Foros del Web » Programación para mayores de 30 ;) » C/C++ »

error con array

Estas en el tema de error con array en el foro de C/C++ en Foros del Web. Este es mi programa en c++,el cual ingreso nombre y se guargan en un arrray y legos recorro ese array y mustro los nombres,no entiendo ...
  #1 (permalink)  
Antiguo 13/01/2012, 15:47
 
Fecha de Ingreso: octubre-2010
Mensajes: 219
Antigüedad: 14 años, 1 mes
Puntos: 2
Pregunta error con array

Este es mi programa en c++,el cual ingreso nombre y se guargan en un arrray y legos recorro ese array y mustro los nombres,no entiendo porque funciona mal.
cuando ingreso el tercer nombre me tira erro y no logro comprender por que.tambien no entiedno que sigifica el signo *.espero que me explique.gracias.

#include <iostream>
#include <string.h>
using namespace std;

int main ()
{
char *nombres[]={};
char nombre[8];
char s='s';
int n=0;
while(s!='n' && s=='s')
{
cout << "Nombre: ";cin >> nombre;
cout << "Deseas seguir: ";cin >> s;
nombres[n]=nombre;
n++;
}
cout <<"***liste de nombre*** \n\n";
for(int c=0;c<n;c++)
{
cout<< nombres[c];
}
}
  #2 (permalink)  
Antiguo 13/01/2012, 16:45
Avatar de CapacProg  
Fecha de Ingreso: marzo-2010
Ubicación: Lima - Perú
Mensajes: 324
Antigüedad: 14 años, 7 meses
Puntos: 71
Respuesta: error con array

Hola, primero el * define un puntero en C++, para saber más de ello aquí. En esencia un puntero guarda la dirección de memoria de una variable que es de un tipo de dato (para su implementación es de tipo char).

Hay un error en su código, la variable nombre tiene una dirección de memoria fija y este va cambiando de valor mientras c='s', lo malo está en que si nombre="abc", entonces nombres[0]="abc" en la primera iteración, luego si cambia a nombre="cde" y hace que nombres[1]=nombre, esto hará que nombres[0]="cde", puesto que nombres[0] y nombres[1] apuntan a la misma dirección de memoria.

El error que le tira es por falta de memoria en su vector de cadenas;
__________________
%
El mejor guerrero no es el que triunfa siempre sino el que vuelve sin miedo a la batalla.
%

Última edición por CapacProg; 13/01/2012 a las 16:54
  #3 (permalink)  
Antiguo 13/01/2012, 17:22
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años, 7 meses
Puntos: 228
Respuesta: error con array

Para empezar, asi estas definiendo un doble puntero

char *nombres[]={};

Puntero o doble puntero, solo ocupa 32 bits (o 64) lo suficiente para guardar la direccion de memoria a donde apunta. La memoria en asi la tienes que reservar de otra forma. Hay dos metodos. Usando memoria statica o usando memoria dinamica.

Para memoria estatica simplementes defines asi tu variable:

char nombres[100][100];

Eso puede ser visto como 100 cadenas de 100 caracteres.

Para usar memoria dinamica tienes que usar el new...te recomiendo empezar con el otro metodo antes.


Luego cuando haces esta asignacion nombres[n]=nombre; solo estas asinando un puntero, asi que todos los nombres apuntan al mismo lugar, asi que en cada iteracion estarias pisando todos los nombres.

Yo eliminaria esa varianle temporaria y pasaria al cin directamente tu variable:

cout << "Nombre: ";cin >> nombres[n];

y para que sepas, si quieres copiar una cadena de caracteres a otras tienes que la funcion strcpy.
  #4 (permalink)  
Antiguo 13/01/2012, 22:29
 
Fecha de Ingreso: octubre-2010
Mensajes: 219
Antigüedad: 14 años, 1 mes
Puntos: 2
Respuesta: error con array

gracias por sus respuestas,me quedo mas claro.ahora voy a leer mas sobre el tema.
Saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:53.