Domingo 15 de Diciembre de 2024, 06:51
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
Fallo de Segmentación???
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Fallo de Segmentación??? (Leído 2040 veces)
samu_dnet
Nuevo Miembro
Mensajes: 7
Fallo de Segmentación???
«
en:
Lunes 14 de Septiembre de 2009, 12:34 »
0
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 propios
public
:
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!!
Tweet
Eternal Idol
Moderador
Mensajes: 4696
Nacionalidad:
Re: Fallo de Segmentación???
«
Respuesta #1 en:
Lunes 14 de Septiembre de 2009, 13:12 »
0
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];
Nacional y Popular
En mi país la bandera de Eva es inmortal.
Queremos una Argentina socialmente justa, económicamente libre y políticamente soberana.
¡Perón cumple, Evita dignifica!
La mano invisible del mercado me robo la billetera.
samu_dnet
Nuevo Miembro
Mensajes: 7
Re: Fallo de Segmentación???
«
Respuesta #2 en:
Lunes 14 de Septiembre de 2009, 15:15 »
0
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
no se asigna acaba en 11 por eso puse 13, es que parece imposible xD
Eternal Idol
Moderador
Mensajes: 4696
Nacionalidad:
Re: Fallo de Segmentación???
«
Respuesta #3 en:
Lunes 14 de Septiembre de 2009, 15:42 »
0
Y tal como esta hecho 11 es la ultima dimension, de 0 a 11.
Nacional y Popular
En mi país la bandera de Eva es inmortal.
Queremos una Argentina socialmente justa, económicamente libre y políticamente soberana.
¡Perón cumple, Evita dignifica!
La mano invisible del mercado me robo la billetera.
samu_dnet
Nuevo Miembro
Mensajes: 7
Re: Fallo de Segmentación???
«
Respuesta #4 en:
Lunes 14 de Septiembre de 2009, 15:57 »
0
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.
Eternal Idol
Moderador
Mensajes: 4696
Nacionalidad:
Re: Fallo de Segmentación???
«
Respuesta #5 en:
Lunes 14 de Septiembre de 2009, 16:24 »
0
Si, el numero de elementos es X, el primer elemento es 0 y el ultimo es X - 1.
Si pones carta Carta[13][4]; podes acceder hasta Carta[12][3] sin problemas.
Nacional y Popular
En mi país la bandera de Eva es inmortal.
Queremos una Argentina socialmente justa, económicamente libre y políticamente soberana.
¡Perón cumple, Evita dignifica!
La mano invisible del mercado me robo la billetera.
samu_dnet
Nuevo Miembro
Mensajes: 7
Re: Fallo de Segmentación???
«
Respuesta #6 en:
Lunes 14 de Septiembre de 2009, 16:36 »
0
MUUUUUCHAS GRACIAS!!
Ya lo he corregido y se ejecuta sin errores!!! Gracias por aclararme lo de los arrays!!
incluso ya puedo poner
Código: C++
baraja
(
)
{
for
(
int
i
=
0
;
i
<
13
;
i
++
)
{
for
(
int
u
=
0
;
u
<
4
;
u
++
)
{
Carta
[
i
]
[
u
]
.
asignar
(
i,u
)
;
}
}
}
que antes me dava otro error xD.
Eternal Idol
Moderador
Mensajes: 4696
Nacionalidad:
Re: Fallo de Segmentación???
«
Respuesta #7 en:
Lunes 14 de Septiembre de 2009, 17:43 »
0
Claro, el maximo valor de i sera 12 y el de u 3, ese justamente es el ultimo elemento del array
Nacional y Popular
En mi país la bandera de Eva es inmortal.
Queremos una Argentina socialmente justa, económicamente libre y políticamente soberana.
¡Perón cumple, Evita dignifica!
La mano invisible del mercado me robo la billetera.
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
Fallo de Segmentación???