Ayuda con error "segmentation fault :11".

Imagen de Halocratos
0 puntos

Hola a todos:
Yo y mi compañero de prácticas nos vemos en la situación de tener que pedir ayuda. Como práctica de universidad tenemos que hacer un programa (en c)que simule una trayectoria aleatoria en dos dimensiones, escribir en un archivo las coordenadas de cada paso (hasta aquí nos ha salido) y que lea de este archivo escrito los valores de x e y y calcule una distancia en L. Es la parte de lectura del archivo la que nos da problemas, ya que no sabemos cómo usar fscanf para leer de dos columnas separadas. Os adjunto el código completo para que os situéis, pero sabed que el problema está en la última parte (el último bucle for).
Por favor, ayudadnos, estamos desesperados XD
Como nota, al compilar nos avisa de que

test.c:68:7: aviso: formato ‘%d’ espera un argumento de tipo ‘int *’, pero el argumento 3 es de tipo ‘int’ [-Wformat]
test.c:68:7: aviso: formato ‘%d’ espera un argumento de tipo ‘int *’, pero el argumento 4 es de tipo ‘int’ [-Wformat]

Ayudadnos por favor!!

#include 
#include 
#include 
#include 

FILE* arxiu;
FILE* arxiudist;
int* x;
int* y;
int i, n, v, lv, aleatorio;
char nomarx [FILENAME_MAX];
char nomarxdist [FILENAME_MAX];

int main()
{

    
    printf("Cuantas randomwalks quieres? \n");
    scanf("%d", &v);
    printf("De cuantos pasos?\n");
    scanf("%d", &n);
    x=( int*) malloc(n*sizeof( int));
    y=( int*) malloc(n*sizeof( int));
    y[0]=0;
    x[0]=0;
    srand(time(NULL));
    for (lv=1 ; lv<=v; lv++)
    {
        
    for(i=1;i<=n;i++)
    {
  aleatorio= (int)((double) rand()/ ((double) RAND_MAX+1)*4.0);
  {  
      if(aleatorio==0)
    {x[i]=x[i-1]+1;
        y[i]=y[i-1];}
    
      else if(aleatorio==1)
         {y[i]=y[i-1]-1;
             x[i]=x[i-1];}
      else if (aleatorio==2)
        {x[i]=x[i-1]-1;
            y[i]=y[i-1];}
      else
      {y[i]=y[i-1]+1;
          x[i]=x[i-1];}
    
          }
  printf(" x= %d \t y= %d\n", x[i] , y[i]);
    
}
        
    for(i=1;i<=n;i++)
            {
        sprintf(nomarx, "rw%d.txt", lv);
 arxiu=fopen(nomarx,"at");  
 fprintf(arxiu,"%d \t %d \n", x[i] , y[i]);
 fclose(arxiu);
            }
  for(i=1; i<=n; i++)
    {
      int dist;

      sprintf(nomarxdist,"dist%d.txt", lv);
      sprintf(nomarx,"rw%d.txt", lv);
      arxiudist=fopen(nomarxdist, "at");
      arxiu=fopen(nomarx, "rt");
      fscanf(arxiu, "%d \t %d", x[i], y[i]);   //revisar
      fclose(arxiu);
      dist= fabs(x[i])+fabs(y[i]);
      fprintf(arxiudist, "%d \t %d", i, dist);
      fclose(arxiudist);
    }
    }
return 0;
}

Imagen de cousteau
+1
0
-1

test.c:68:7: aviso: formato ‘%d’ espera un argumento de tipo ‘int *’, pero el argumento 3 es de tipo ‘int’ [-Wformat]

El error está en la línea 68, carácter 7. Creo que es donde pone fscanf(arxiu, "%d \t %d", x[i], y[i]);. El error dice que estás pasando un entero donde se esperaba un puntero.
En scanf tienes que pasarle la dirección de la variable donde quieres que se guarde el dato, no la variable en sí. Como x e y son arrays de enteros, x[i] e y[i] son enteros. Necesitarás pasar la dirección de esos elementos del array:

fscanf(arxiu, "%d \t %d", &x[i], &y[i]);
+1
0
-1

«E: dpkg was interrupted, you must manually run 'dpkg --configure -a' to correct the problem» significa que dpkg se ha interrumpido y que tienes que ejecutar "sudo dpkg --configure -a" para corregir el problema.
Imagen de Halocratos
+1
0
-1

Muchísimas gracias, nos sirvió mucho :)

+1
0
-1