Error al compilar

Iniciado por HectorSersi, 11 Diciembre 2018, 19:00 PM

0 Miembros y 1 Visitante están viendo este tema.

HectorSersi

Buenas, me sale un error al compilar y luego en la puntuación me salen numeros negativos cuando deberían salir numeros pequeños...Es un error que nunca me habia salido y no se por que es.

https://gyazo.com/dd40d2b77b7fa13ba755a169e3b819fe

Código (cpp) [Seleccionar]
bool esProbablePasarse(double puntosMaquina, const tCartasPorAparecer cartas)
{
int dato, variable = 0, variable2 = 0, probabilidad;
bool pasarse;
dato = 7.5 - puntosMaquina;

for (int i = dato; i < 8; i++)
{
variable = variable + cartas[i];
}

for (int i = 0; i < 8; i++)
{
variable2 = cartas[i] + variable2;
}

probabilidad = variable / variable2;

if (probabilidad < 0.5)
{
pasarse = false;
}
else
pasarse = true;

return pasarse;

}

AlbertoBSD

Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW


AlbertoBSD

Par empezar el tipo de dato de la variable Dato es double no Int, no puedes o mas bien vas a tener errores por guardar un dato entero cuando realemnte esperas un tipo de dato flotante o double.

Segundo segun veo tu Screenshot.


for (int i = dato; i < 8; i++)
{
variable = variable + cartas[i];
}


Iguales i al valor de dato pero cuando realizas una Operacion en dato como:

dato = 7.5 - puntosMaquina;

El resultado no va a ser siempre el que esperes, a no ser que estes 100% seguro que la operacion siempre va a devolver un numero entero.

ahora el error que te aparece es que estas tratando de acceder a una region de memoria no valida, ya sea que te excediste del limite del arreglo o la variable cartas es apuntador No valido. (Cosas que no podemos saber por que no tenemos acceso al resto del codigo.

Te recomiendo colocar Mejores nombres a tus variables por que los nombres de "dato" y "variable" son muy escuetos.

Saludos
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

HectorSersi

Cita de: AlbertoBSD en 11 Diciembre 2018, 19:20 PM
Par empezar el tipo de dato de la variable Dato es double no Int, no puedes o mas bien vas a tener errores por guardar un dato entero cuando realemnte esperas un tipo de dato flotante o double.

Segundo segun veo tu Screenshot.


for (int i = dato; i < 8; i++)
{
variable = variable + cartas[i];
}


Iguales i al valor de dato pero cuando realizas una Operacion en dato como:

dato = 7.5 - puntosMaquina;

El resultado no va a ser siempre el que esperes, a no ser que estes 100% seguro que la operacion siempre va a devolver un numero entero.

ahora el error que te aparece es que estas tratando de acceder a una region de memoria no valida, ya sea que te excediste del limite del arreglo o la variable cartas es apuntador No valido. (Cosas que no podemos saber por que no tenemos acceso al resto del codigo.

Te recomiendo colocar Mejores nombres a tus variables por que los nombres de "dato" y "variable" son muy escuetos.

Saludos

Gracias, como puedo haberme pasado si yo he definido el array como
Código (cpp) [Seleccionar]
typedef int tCartasPorAparecer[8];  y con el for he hecho que lea hasta el 8 a si que no creo que me haya pasado... y lo de no valido no se como ver si es eso...

K-YreX

Primero que tienes que cambiar todas las variables de <int> a <double> como ya te han comentado. Sino vas a perder los decimales de los cálculos.

El problema de compilación que te da puede ser por pasar ese tipo de dato así. Es una cosa que no te puedo decir seguro ya que nunca lo he usado.

Y el primer <for> tiene que empezar desde 0, la diferencia entre "variable" y "variable2" es que una tiene que tener el número de cartas de cada tipo por su valor y la otra tiene que acumular el número de cartas sólo. Por lo que lo puedes hacer todo en un mismo <for>.

Y por último, un código que sea:
Código (cpp) [Seleccionar]

bool variable;
if(condicion)
    variable = true;
else
    variable = false;

Es mejor suponer un valor inicial y solo lo cambias una vez:
Código (cpp) [Seleccionar]

bool variable = false;
if(condicion)
    variable = true;

Pero esto último es simplemente como recomendación, de la otra forma funciona igual. Suerte. :-X
PD: No cites un mensaje para responder, dale arriba del todo o abajo del todo donde pone "responder" y no agregues citas a no ser que sea para comentar algo específico de lo que ha dicho otra persona.
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;

CalgaryCorpus

Si la variable es booleana, más corto

Código (cpp) [Seleccionar]
variable = condicion;
Aqui mi perfil en LinkedIn, invitame un cafe aqui