Programación General > C/C++

 Fallo de Segmentación???

(1/2) > >>

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

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa