C/Visual C - Core Dumped

 
Vista:

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
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Core Dumped

Publicado por Tom (619 intervenciones) el 21/06/2010 16:57:12
Si dimensionas un array de 3 elementos, el rango para indexarlo va de 0 a 2. O sea si asignas algo a array[3] harás petar tu programa, y me da la impresión de que estás haciendo eso mismo en la función GenerarCM():
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Core Dumped

Publicado por Tom (619 intervenciones) el 21/06/2010 17:07:58
Confirmado, en la 3ª o 4ª entrada a GenerarCM intentas acceder a cuadradoMagico[-1][3] (siendo n = 3).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Core Dumped

Publicado por Adrian (6 intervenciones) el 21/06/2010 17:11:41
waahh muchisimas gracias aunke el programa ya esta entregado.. xDD lo pedian kon recursuvidad.... les he dixo ke al final no lo consegui con recursividad y se lo he entregado funcionando pero kon bucles sencillos... pero bien... haber ke me ponen jajajajaj aunke no me esperaba eso de el valor ese... porque le digo ke cuando x valga -1 la transforme a n
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar