elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda con error en c++ , return raro
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con error en c++ , return raro  (Leído 5,006 veces)
strancok

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Ayuda con error en c++ , return raro
« en: 18 Julio 2019, 09:22 am »

Hola a todos, quisiera que me colaboraran para poder encontrar mi error al ejecutar este codigo. Al compilarlo no muestra errores ni advertencias y de hecho funciona bien cuando defino la variable cantidadClientes = 2, con ese valor realiza exactamente lo que deseo que haga, pero con un valor de 1 (aqui falla al ingresar el primer nombre) o 3 (aqui falla al ingresar el tercer nombre), sencillamente no me deja ingresar el nombre del cliente y se sale del codigo arrojando return value 3221225477 y no return 0 como se indica.

Adicional, tambien observe que sale este mensaje al depurar el codigo, Program received signal SIGSEGV segmentation fault.

Soy algo principiante con este lenguaje, espero me puedan colaborar. De antemano gracias por su atencion.

Codigo

Código:
#include <iostream>
#include <string>

using namespace std;


int main()
{
int cantidadClientes;

cout << "Cantidad de clientes: ";
cin >> cantidadClientes;

string cliente[cantidadClientes];
int cantidadArticulos[cantidadClientes];
double precioUnitario, subtotal[cantidadClientes], total;

for (int i = 1; i <= cantidadClientes; i++)
{
cout << "Nombre del cliente #"<< i << ": ";
cin >> cliente[i];

cout << "Cantidad de articulos comprados: ";
cin >> cantidadArticulos[i];

for (int j = 1; j<= cantidadArticulos[i]; j++)
{
cout << "Precio unitario del articulo #" << j << " $";
cin >> precioUnitario;
cout << endl;

subtotal[i] = subtotal[i] + precioUnitario;
}

total = total + subtotal[i];
}

for (int k = 1; k <= cantidadClientes; k++)
{
//total = total + subtotal;
cout << "Nombre   " << cliente[k] << " Cantidad Articulos:   " << cantidadArticulos[k] << "  Total Cliente:   " << subtotal[k] << endl;

}

cout << "Total:   " << total;

return 0;
}




Esto es lo que se supone deberia hacer pero solo funciona cuando el numero de clientes es 2, 4 y asi... no se el porque ---->



« Última modificación: 18 Julio 2019, 18:39 pm por strancok » En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Ayuda con error en c++ return 3221225477
« Respuesta #1 en: 18 Julio 2019, 16:40 pm »

Los elementos de un array estan numerados de 0 en adelante, ejemplo:

Código
  1. int an_arr[3];
  2. an_arr[0] = 1;
  3. an_arr[1] = 2;
  4. an_arr[2] = 3;
  5. an_arr[3] = 4; // Mal, estamos accediendo a memoria que no pertenece al array.

PD. Presta atencion a los warnings:
warning C4700: uninitialized local variable 'total' used


En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
strancok

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: Ayuda con error en c++ return 3221225477
« Respuesta #2 en: 18 Julio 2019, 18:35 pm »

Los elementos de un array estan numerados de 0 en adelante, ejemplo:

Código
  1. int an_arr[3];
  2. an_arr[0] = 1;
  3. an_arr[1] = 2;
  4. an_arr[2] = 3;
  5. an_arr[3] = 4; // Mal, estamos accediendo a memoria que no pertenece al array.

PD. Presta atencion a los warnings:
warning C4700: uninitialized local variable 'total' used

No me sale ningun warning almenos con este compilador, editare y adjuntare imagenes de lo que sale tanto cuando compilo como cuando ejecuto el codigo
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Ayuda con error en c++ return 3221225477
« Respuesta #3 en: 18 Julio 2019, 22:12 pm »

No me sale ningun warning almenos con este compilador, editare y adjuntare imagenes de lo que sale tanto cuando compilo como cuando ejecuto el codigo

Punto para el VC++ que si lo hace, la variable total tiene un valor indeterminado (deberias inicializarlo a cero) cuando la usas.

El problema principal es que accedes mal a los arrays como te comente antes, ejemplo si cantidadClientes es 3:

Código
  1. for (int i = 1; i <= cantidadClientes; i++)
  2. {
  3. cin >> cliente[i];
  4. ...

Tu codigo accedera a cliente[1], cliente[2] y cliente[3].
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
@XSStringManolo
Hacker/Programador
Colaborador
***
Desconectado Desconectado

Mensajes: 2.397


Turn off the red ligth


Ver Perfil WWW
Re: Ayuda con error en c++ , return raro
« Respuesta #4 en: 18 Julio 2019, 22:18 pm »

No uses devcpp no te lo recomiendo. La interfaz es muy clara pero te va a dar problemas una y otra vez. Usa codeblocks. Si no te gusta la interfaz usa el notepadc++ para escribir código y copias y pegas.
En línea

Mi perfil de patrocinadores de GitHub está activo! Puedes patrocinarme para apoyar mi trabajo de código abierto 💖

strancok

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: Ayuda con error en c++ return 3221225477
« Respuesta #5 en: 18 Julio 2019, 23:30 pm »

Citar
Punto para el VC++ que si lo hace, la variable total tiene un valor indeterminado (deberias inicializarlo a cero) cuando la usas.

El problema principal es que accedes mal a los arrays como te comente antes, ejemplo si cantidadClientes es 3:

Código
  1. for (int i = 1; i <= cantidadClientes; i++)
  2. {
  3. cin >> cliente[i];
  4. ...

Tu codigo accedera a cliente[1], cliente[2] y cliente[3].

Entiendo, entonces el valor correcto para entrar al array, en caso de ser 3 clientes deberia ser con i < cantidadClientes ?? para que pase por las posiciones 0 = 1 , 1 = 2 y 2 = 3 ??

y seguire el consejo de cambiar de compilador, solamente instale ese porque era el de turno para utilizar
« Última modificación: 18 Julio 2019, 23:35 pm por strancok » En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Ayuda con error en c++ , return raro
« Respuesta #6 en: 19 Julio 2019, 00:00 am »

Piénsalo de esta forma, de hecho es así como funciona:

Un array es un conjunto de elementos del mismo tipo puestos uno detrás de otro en la memoria.

El identificador de un array, su nombre, te devuelve su posición de memoria de inicio (apunta al primero elemento). Supongamos que hemos llamado a un array mi_array:
Siendo que mi_array tiene una dirección de inicio, supongamos, que es la 100 entonces el primer elemento empieza en 100. Siendo así 100+0 es la dirección del primer elemento o, en notación de arrays, mi_array[0] es la dirección del primer elemento.

Si nos vamos a la siguiente posición de memoria encontraremos el segundo elemento: 100+1 será el segundo elemento, lo que en notación de arrays sería mi_array[1].

Ahora supongamos que el array es de tres elementos. Hasta ahora hemos accedido a los dos primeros. Para acceder al tercer elemento, y siguiendo con el planteamiento anterior, se encontraría en la posición 100+2, o lo que es lo mismo en notación de arrays mi_array[2].

Y es por esto que los arrays empiezan con el índice 0 y terminan con un índice una unidad menos que su número de elementos.
En línea

strancok

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: Ayuda con error en c++ , return raro
« Respuesta #7 en: 19 Julio 2019, 00:47 am »

Listo, tenian toda y la entera razon, estaba utilizando mal los arrays, ya les entendi y corregi mi error y ahora funciona tal y como deberia. Les agradezco mucho la ayuda.

asi quedo el for para lo que necesitaba

Código:
for (int i = 0; i < cantidadClientes; i++)
{
           .
           .
           .

y ya inicialice la variable total en 0 tambien. Si tienen alguna otra sugerencia seria de gran ayuda.
En línea

@XSStringManolo
Hacker/Programador
Colaborador
***
Desconectado Desconectado

Mensajes: 2.397


Turn off the red ligth


Ver Perfil WWW
Re: Ayuda con error en c++ , return raro
« Respuesta #8 en: 19 Julio 2019, 01:05 am »

Un string es un array de varios char. Un vector son varios array.
La ventaja del vector sobre el array es que es dinámico, es decir, su tamaño se cambia automáticamente, por lo que no necesitas indicarlo tú. Esto lo hace utilizando varios arrays. Cuando un array se rellena y necesitas guardar algo más, el vector crea automáticamente un nuevo array con el doble de tamaño, copia y pega el contenido que tenías en el array que estaba lleno sobre el nuevo array y añade también el nuevo contenido.
El resultado de esto es que todos los elementos del vector están contiguos en memoria. Como resultado de esta implementación un vector al final no deja de ser un array. A parte, string y vector forman parte de los contenedores de la STL Standart Template Library. Prácticamente todos los contenedores que forman parte de la biblioteca de plantillas estandar, puede usar los mísmos métodos fácilmente con el operador punto.
.size(), .append(), etc.

El libro apress learn c++ for game development da un buen repaso y teoría a este tipo de cosas.
En línea

Mi perfil de patrocinadores de GitHub está activo! Puedes patrocinarme para apoyar mi trabajo de código abierto 💖

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Funcion mail() error para ultimo argumento (return-path)
PHP
Diabliyo 1 3,017 Último mensaje 13 Agosto 2010, 01:18 am
por Diabliyo
Un return un tanto peculiar, Ayuda.
Programación C/C++
anonimo12121 1 1,844 Último mensaje 8 Mayo 2012, 00:04 am
por n0z
(Ayuda) Error de ejecución Exited with return value 3221225477
Programación C/C++
fede196 2 7,187 Último mensaje 2 Junio 2015, 05:16 am
por rir3760
error id return 1 exist status
Ejercicios
JuanKa 0 2,262 Último mensaje 3 Octubre 2017, 16:30 pm
por JuanKa
Ayuda nose porque me sale el error "ID return 1 exit status" y gracias :v
Programación C/C++
xjafet 1 5,460 Último mensaje 27 Octubre 2017, 19:59 pm
por engel lex
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines