Core Dumped
Publicado por Adrian (6 intervenciones) el 20/06/2010 02:40:46
Hola gente, me gustaria que miraseis un problema que tengo en el siguiente programa, me salta un coredupmed, lo tengo localizado pero no se porque me salta...
El codigo es el siguiente y les marco donde esta el fallo (esta en la función recursiva):
#include <stdio.h>
#include <stdlib.h>
int GenerarCM(int** cuadradoMagico, int x, int y, int max, int n, int i)
{
int xtemp, ytemp,j;
x=x-1;
y=y+1;
xtemp=x;
ytemp=y;
if ((cuadradoMagico[x][y]==0)&&(x<0)&&(y>n))
{
cuadradoMagico[x][y]=i;
}
if (x==-1)
{
x=n-1;
}
if (y==n)
{
y=0;
}
if (cuadradoMagico[x][y]==0)
{
cuadradoMagico[x][y]=i;
}
else
{
x=xtemp+2;
y=ytemp-1;
cuadradoMagico[x][y]=i;
}
if (i<=max)
{
GenerarCM(cuadradoMagico,x,y,max,n,i+1); //AQUI SALTA EL CORE DUMPED
}
else
{
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("%d ", cuadradoMagico[i][j]);
}
printf("\n");
}
}
}
main( int argc, const char *argv[] ) //newprojects arguments
{
int n,max,i,j,x=0,y=0,xtemp,ytemp,suma1=0,suma2=0,true=1;
if (atoi(argv[1])==1)
{
FILE *c;
int p,i=0,j,SUMA;
c=fopen("cuadrado.txt","r");
if (c==NULL)
{
printf("Error obrint els fitxers\n");
}
else
{
while (!feof(c))
{
fscanf(c,"%d",&p);
i++;
}
printf("%d\n",i);
fclose(c);
if (i%2==0)
{
printf("El cuadrado no es magico porque tiene lados pares y deverian ser impares");
}
else
{
p=sqrt(i);
int **cuadradoMagico1;
cuadradoMagico1=(int **) malloc(p*sizeof(int*));
for(i=0;i<p;i++)
{
cuadradoMagico1[i]=(int*) malloc(p*sizeof(int));
}
c=fopen("cuadrado.txt","r");
for(i=0;i<p;i++)
{
for(j=0;j<p;j++)
{
fscanf(c,"%d",&cuadradoMagico1[i][j]);
}
}
for(i=0;i<p;i++)
{
for(j=0;j<p;j++)
{
printf("%d",cuadradoMagico1[i][j]);
}
printf("\n");
}
fclose(c);
for(i=0;i<p;i++)
{
suma1=0;
for(j=0;j<p;j++)
{
suma1=suma1+cuadradoMagico1[i][j];
}
if (suma2==0)
{
suma2=suma1;
}
if (suma1!=suma2)
{
true=0;
break;
}
}
for(i=0;i<p;i++)
{
suma1=0;
for(j=0;j<p;j++)
{
suma1=suma1+cuadradoMagico1[j][i];
}
if (suma1!=suma2)
{
true=0;
break;
}
}
suma1=0;
for(i=0;i<p;i++)
{
suma1=suma1+cuadradoMagico1[i][i];
}
if (suma1!=suma2)
{
true=0;
}
j=p;
suma1=0;
for(i=0;i<p;i++)
{
suma1=suma1+cuadradoMagico1[j-1][i];
}
if (suma1!=suma2)
{
true=0;
}
if (true==1)
{
printf("El cuadrado es magico!");
}
else
{
printf("El cuadrado no es magico");
}
}
}
}
if (atoi(argv[1])==2)
{
n=atoi(argv[3]);
if (n%2==0)
{
printf("El numero introducido no es un numero impar\n");
}
else
{
int **cuadradoMagico;
cuadradoMagico=(int **) malloc(n*sizeof(int*));
for(i=0;i<n;i++)
{
cuadradoMagico[i]=(int*) malloc(n*sizeof(int));
}
max=n*n;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
cuadradoMagico[i][j]=0;
}
}
cuadradoMagico[0][n/2]=1;
x=n-1;
y=(n/2)+1;
cuadradoMagico[x][y]=2;
i=3;
GenerarCM(cuadradoMagico,x,y,max,n,i);
}
}
}
Muchisimas gracias si me pudiesen responder me harian un gran fabor, tengo ke entregar el programa este lunes xDD estoy en apuros jejjeje,
Gracias otra vez
El codigo es el siguiente y les marco donde esta el fallo (esta en la función recursiva):
#include <stdio.h>
#include <stdlib.h>
int GenerarCM(int** cuadradoMagico, int x, int y, int max, int n, int i)
{
int xtemp, ytemp,j;
x=x-1;
y=y+1;
xtemp=x;
ytemp=y;
if ((cuadradoMagico[x][y]==0)&&(x<0)&&(y>n))
{
cuadradoMagico[x][y]=i;
}
if (x==-1)
{
x=n-1;
}
if (y==n)
{
y=0;
}
if (cuadradoMagico[x][y]==0)
{
cuadradoMagico[x][y]=i;
}
else
{
x=xtemp+2;
y=ytemp-1;
cuadradoMagico[x][y]=i;
}
if (i<=max)
{
GenerarCM(cuadradoMagico,x,y,max,n,i+1); //AQUI SALTA EL CORE DUMPED
}
else
{
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("%d ", cuadradoMagico[i][j]);
}
printf("\n");
}
}
}
main( int argc, const char *argv[] ) //newprojects arguments
{
int n,max,i,j,x=0,y=0,xtemp,ytemp,suma1=0,suma2=0,true=1;
if (atoi(argv[1])==1)
{
FILE *c;
int p,i=0,j,SUMA;
c=fopen("cuadrado.txt","r");
if (c==NULL)
{
printf("Error obrint els fitxers\n");
}
else
{
while (!feof(c))
{
fscanf(c,"%d",&p);
i++;
}
printf("%d\n",i);
fclose(c);
if (i%2==0)
{
printf("El cuadrado no es magico porque tiene lados pares y deverian ser impares");
}
else
{
p=sqrt(i);
int **cuadradoMagico1;
cuadradoMagico1=(int **) malloc(p*sizeof(int*));
for(i=0;i<p;i++)
{
cuadradoMagico1[i]=(int*) malloc(p*sizeof(int));
}
c=fopen("cuadrado.txt","r");
for(i=0;i<p;i++)
{
for(j=0;j<p;j++)
{
fscanf(c,"%d",&cuadradoMagico1[i][j]);
}
}
for(i=0;i<p;i++)
{
for(j=0;j<p;j++)
{
printf("%d",cuadradoMagico1[i][j]);
}
printf("\n");
}
fclose(c);
for(i=0;i<p;i++)
{
suma1=0;
for(j=0;j<p;j++)
{
suma1=suma1+cuadradoMagico1[i][j];
}
if (suma2==0)
{
suma2=suma1;
}
if (suma1!=suma2)
{
true=0;
break;
}
}
for(i=0;i<p;i++)
{
suma1=0;
for(j=0;j<p;j++)
{
suma1=suma1+cuadradoMagico1[j][i];
}
if (suma1!=suma2)
{
true=0;
break;
}
}
suma1=0;
for(i=0;i<p;i++)
{
suma1=suma1+cuadradoMagico1[i][i];
}
if (suma1!=suma2)
{
true=0;
}
j=p;
suma1=0;
for(i=0;i<p;i++)
{
suma1=suma1+cuadradoMagico1[j-1][i];
}
if (suma1!=suma2)
{
true=0;
}
if (true==1)
{
printf("El cuadrado es magico!");
}
else
{
printf("El cuadrado no es magico");
}
}
}
}
if (atoi(argv[1])==2)
{
n=atoi(argv[3]);
if (n%2==0)
{
printf("El numero introducido no es un numero impar\n");
}
else
{
int **cuadradoMagico;
cuadradoMagico=(int **) malloc(n*sizeof(int*));
for(i=0;i<n;i++)
{
cuadradoMagico[i]=(int*) malloc(n*sizeof(int));
}
max=n*n;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
cuadradoMagico[i][j]=0;
}
}
cuadradoMagico[0][n/2]=1;
x=n-1;
y=(n/2)+1;
cuadradoMagico[x][y]=2;
i=3;
GenerarCM(cuadradoMagico,x,y,max,n,i);
}
}
}
Muchisimas gracias si me pudiesen responder me harian un gran fabor, tengo ke entregar el programa este lunes xDD estoy en apuros jejjeje,
Gracias otra vez
Valora esta pregunta


0