Programación General > C/C++
Fallo de Segmentación???
samu_dnet:
un fallo de segmentacion que no llego a comprender!!
pruebas.cpp
--- Código: C++ ---#include "pruebas.h" int main() { baraja Baraja = new baraja(); return 0; } pruebas.h
--- Código: C++ --- #if !defined (_PRUEBAS_H_)#define _PRUEBAS_H#include <iostream>using namespace std; ////////////////// C A R T A ///////////////////////////////////////////////class carta{ //Variables y tipos propiospublic: enum valores{as,dos,tres,cuatro,cinco,seis,siete,ocho,nueve,diez,sota,reina,rey}; enum palos{picas,corazones,treboles,rombos}; valores valor; palos palo; bool ex; //Mostrar en Consola void mostrar() { cout << endl << valores(valor)<<endl<<palos(palo)<<endl; } //Constructor carta(){ex = false;} carta(valores Valor,palos Palo) { valor = Valor; palo = Palo; ex = false; } // Metodo Asignación void asignar(int a, int b) { switch (a) { case 0:valor = as;cout << endl<<"Asignado AS ";break; case 1:valor = dos;cout << endl<<"Asignado DOS ";break; case 2:valor = tres;cout << endl<<"Asignado TRES ";break; case 3:valor = cuatro;cout << endl<<"Asignado CUATRO ";break; case 4:valor = cinco;cout << endl<<"Asignado CINCO ";break; case 5:valor = seis;cout << endl<<"Asignado SEIS ";break; case 6:valor = siete;cout << endl<<"Asignado SIETE ";break; case 7:valor = ocho;cout << endl<<"Asignado OCHO ";break; case 8:valor = nueve;cout << endl<<"Asignado NUEVE ";break; case 9:valor = diez;cout << endl<<"Asignado DIEZ ";break; case 10:valor = sota;cout << endl<<"Asignado SOTA ";break; case 11:valor = reina;cout << endl<<"Asignado REINA ";break; case 12:valor = rey;cout << endl<<"Asignado REI ";break; default:cout << endl << "ERROR al asignar valor"<<endl;break; } switch (b) { case 0:palo = picas;cout <<"de PICAS"<<endl;break; case 1:palo = corazones;cout <<"de CORAZONES"<<endl;break; case 2:palo = treboles;cout <<"de TREBOLES"<<endl;break; case 3:palo = rombos;cout <<"de ROMBOS"<<endl;break; default:cout << endl << "ERROR AL ASIGNAR PALO"<<endl;break; } } }; //////////////////////////// FIN DE C A R T A /////////////////////////////// class baraja{ public: carta Carta[12][3]; baraja() { for (int i = 0; i < 13; i++) { Carta[i][0].asignar(i,0); } for (int i = 0; i < 13; i++) { Carta[i][1].asignar(i,1); } for (int i = 0; i < 13; i++) { Carta[i][2].asignar(i,2); } for (int i = 0; i < 13; i++) { Carta[i][3].asignar(i,3); } }}; #endif Al Ejecutar el binario se ve que asigna toda la baraja, pero acaba el programa con fallo de segmentacion, que raro no??
gracias por la ayuda a todos!!
Eternal Idol:
Tenes un problema de concepto con los arrays en C/C++, el primer elemento de un array es el 0 y el ultimo es el tamaño menos uno. Por ejemplo si tenes un array de 5 elementos estos van de 0 a 4.
En barata tenes este miembro:
carta Carta[12][3];
Y despues en el constructor accedes a la dimension 12, 3 por ejemplo, eso esta mal, el ultimo elemento de todos es carta[11][2];
Parece no haber otros problemas y funcionar bien cambiando el miembro a:
carta Carta[13][4];
samu_dnet:
gracias por la respuesta, si esto ya lo sabia, pero el problema es que si en el bucle for le pongo a " i < 12 " óno se ejecuta la instrucción y el objeto carta[x] no se asigna acaba en 11 por eso puse 13, es que parece imposible xD
Eternal Idol:
Y tal como esta hecho 11 es la ultima dimension, de 0 a 11.
samu_dnet:
entonces un array por ejemplo myarray[4] va de 0 a 3 ???
por que yo tengo puesto carta[12] y si se para en 11 no me va vien, deberia poner carta[13] (de la as al rey), Muchas gracias por las respuestas la verdad ahora mismo estoy un poco desconcertado xD.
Navegación
[#] Página Siguiente
Ir a la versión completa