Segmentation Fault ('core' generado)

Iniciado por Magner, 4 Marzo 2015, 11:31 AM

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

Magner

Hola, estoy haciendo un programa en C++ que tiene que simular la caida de una pelota a través de unos obstaculos.

El problema es que despues de simular la caida, vuelve al menu, y sin hacer nada parece que vuelve a entrar en la opción de la caida y a la que se introduce cualquier dato, sale "segmentation fault", como puedo arreglar-lo?



Código (cpp) [Seleccionar]
#include<stdio.h>
//int disparos_pos[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
//char disparos_dir[10]= {'i','i','d','i','d','d','i','d','d','i'};
int n,i,j;
int bola;
int testbola=3;
char testdirec='d';


void mblanc (int tabla [10][10]);
void caiguda (int tabla [10][10]);
void ncaiguda (int tabla [10][10]);
void estadist (int tabla [10][10]);
void menu(void);

main(){
int opcion;
int tabla[10][10] = {
{0,0,0,0,0,0,0,0,0,0},
{1,0,0,0,0,0,0,1,0,0},
{0,1,0,0,0,0,1,0,0,0},
{0,0,1,0,0,1,0,0,0,0},
{0,0,0,0,0,0,0,0,0,1},
{0,0,0,0,0,0,0,0,1,0},
{0,0,0,0,0,0,0,0,0,0},
{0,1,0,0,0,1,0,0,0,0},
{0,1,0,0,0,1,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0}
};

do{
printf("------------------------MENU----------------------------- \n");
printf("1- Visualizar el contenido de la tabla de obstáculos por pantalla \n");
printf("2- Visualizar e stadidisticas de la tabla \n");
printf("3- Simuluar la caída de una pelota \n");
printf("4- Simular la caída de 10 pelotas \n");
printf("5- Salir \n");
printf("introduce tu opcion: ");
scanf ("%d",&opcion);

switch(opcion){

case 1:
printf("Esta es la tabla: \n");
mblanc(tabla);

break;

case 2:

break;

case 3:

caiguda(tabla);
ncaiguda(tabla);

break;

case 4:

//caiguda(tabla);
//ncaiguda(tabla);

break;

case 5:
printf("Adios");
break;

default:
printf("Opción incorrecta \n");
printf("Introduce un numero entre el 1 y el 5 \n");
break;
}

}while(opcion!=5);

}
void mblanc (int tabla [10][10]){
for(i=0;i<10;i++){
for(j=0;j<10;j++){
if(tabla[i][j]==0){
printf(" ");
}
if(tabla[i][j]==1){
printf("*");
}

}
printf("\n");
}

}
void caiguda (int tabla [10][10]){
int posicion;
char direccion;
int cont=2;
printf("Indica la posicion desde la que cae la bola \n");
scanf ("%d",&posicion);
printf("Indica la direccion en la que gira la bola:");
scanf("%c",&direccion);
printf(" \n");
tabla[0][posicion] = cont;
for(i=0;i<10;i++){
for(j=0;j<10;j++){
if(j==posicion){
if(tabla[i+1][posicion]==0){ //nada debajo
cont++;
tabla[i+1][posicion]=cont;
}
else/*(tabla[i+1][posicion]==1)*/{ //algo debajo
if(tabla[i+2][posicion]==1){ //vertical
if(direccion=='d'){
cont++;
posicion++;
tabla[i][posicion]=cont;
j=0;
}
if(direccion=='i'){
cont++;
posicion--;
tabla[i][posicion]=cont;
j=0;
}
}
if(tabla[i+1][posicion+1]==1 || tabla[i+1][posicion-1]==1){ //recta
if(direccion=='d'){
cont++;
posicion++;
tabla[i][posicion]=cont;
j=0;
}
if(direccion=='i'){
cont++;
posicion--;
tabla[i][posicion]=cont;
j=0;
}

}
if(tabla[i][posicion-1]==1 || tabla[i+2][posicion+1]==1){ //diagonal  
cont++;
posicion++;
direccion = 'd';
tabla[i][posicion]=cont;
j=0;
}
if(tabla[i][posicion+1]==1 || tabla[i+2][posicion-1]==1){ //diagonal
cont++;
posicion--;
direccion = 'i';
tabla[i][posicion]=cont;
j=0;
}


}
}
}
}
for(i=0;i<10;i++){
for(j=0;j<10;j++){
if(tabla[i][j]==1){
printf("*");
}
if(tabla[i][j]==0){
printf(" ");
}
if(tabla[i][j]!=0 && tabla[i][j]!=1){
printf("%d",tabla[i][j]);
}
}
printf("\n");
}



}
void ncaiguda (int tabla [10][10]){
for(i=0;i<10;i++){
for(j=0;j<10;j++){
if(tabla[i][j]!=1){
tabla[i][j] = 0;
}

}
}

}
void estadist (int tabla [10][10]){


}


Muchas gracias :)

Eternal Idol

Depura tu programa (podes usar gdb, en Google hay mucha informacion al respecto).
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