fprintf in c erase th firs character char of the next line - c

i have a function, it write in file but when i update my file, i can see the line i have updated erase the first char of the next line. I saw thiw proceed when the number is >= 10...
`
void addPieceToFile(Piece* p, char* file){
FILE* f = fopen(file, "rw+");
int nbrSalles = 0;
int id = 0;
int test;
if(f != NULL) {
fseek(f,0, SEEK_END);
if(ftell(f) == 0){ //Premier passage ici si le fichier est vide
fprintf(f,"{%d}\n",nbrSalles += 1);
fprintf(f,"[%d|%d]%d\n",p->height, p->width, p->id);
for(int i = 0; i < p->height; i +=1 ){
for(int j = 0; j < p->width; j +=1 ){
fprintf(f,"%c ",p->piece[i][j]);
}
fprintf(f,"\n");
}
}else{ //Si le fichier contient déja une ou plusieur pieces on rentre ici
rewind(f); // On remonte au début du fichier
fscanf(f,"{%d}\n",&nbrSalles); // On récupère le nombre de salles
fscanf(f,"[%d|%d]%d\n",&p->height, &p->width, &id); // On récupère le nombre de salles
fseek(f,0,SEEK_END); // On revient a la fin du fichier ppour ecrire la nouvelle salle
test = testeChaine(TEMP_FILE,file);
if(test==1){
fprintf(f,"[%d|%d]%d\n",p->height, p->width, p->id); // On garde l'id actuelle en cas de modification
}else{
fprintf(f,"[%d|%d]%d\n",p->height, p->width, p->id+nbrSalles); // On met à jour l'id
}
for(int i = 0; i < p->height; i +=1 ){
for(int j = 0; j < p->width; j +=1 ){
fprintf(f,"%c ",p->piece[i][j]);
}
fprintf(f,"\n");
}
rewind(f); // On revient en haut du fichier
nbrSalles = nbrSalles + 1;
fprintf(f,"{%d}",nbrSalles); // Et on met à jour le nombre de salles I THINK THE PROBLEM IS HERE
}
system("clear");
result("Piece ajoutée.");
}else{
system("clear");
printf("Error. %s\n",file);
}
fclose(f);
}
`
I want to avoid this bug.
Thank you for your help.

Related

a matrix not printing correctly in c

I don't know why mat[7][8]='A' prints A in the whole column. The procedure is a game grid where we should put pions of gamers and maintain all their previous pions on the grid. I don't know why changing the value of this matrix outside a for loop doesn't do anything right as it supposed to be.
Here is the code:
#include "Go_1.h"
#define DIMENSION 9
#define SPACELEFT 2
/* cette donction permet d'affichier la matrice à l'état initial, de placer le pion du joueur à
l'intersection en analysant si la place est vide ou pas, et d'afficher la grille avec les pions
des joueurs*/
void grille(char mat[][TAILLE_MATRICE], int *x, int *y,char jeton,char *joueur,char lettres[],char nombres[])
{
int a=0; /* servira de compteur pour afficher tous les caracteres de A--I en utilsant le code ASCII*/
int b=1;
const int LIGNE_COLONNE=(SPACELEFT-1)*(DIMENSION-1)+ DIMENSION;/* = 25// nb de lignes et colonnes où
on doir afficher les valeurs de la matrice stockées dans LIGNE_COLONNE(25) lignes et colonnes*/
printf("\t");
printf(" "); /*2 spaces*/
/*affichage des lettres délimitant le goban horizontalement*/
for(int j=0;j<DIMENSION;j++)
{
printf("%c", 'A'+a);
a++;
for (int k=0; k<(2*SPACELEFT-1);k++)
{
printf(" "); /*5 spaces 5= 2*SPACELEFT-1 */
}
}
printf("\n");
/*Remplissage de la matrice*/
for (int i=0;i<LIGNE_COLONNE;i+=SPACELEFT)
{
for (int j=0;j<LIGNE_COLONNE;j+=SPACELEFT)
{
mat[i][j]='0';
}
}
mat[7][8]='A';
/*affichage des nombres délimitant le goban verticalement*/
for (int i=0;i<LIGNE_COLONNE;i++) /* LIGNE_COLONNE in this case= 25*/
{
printf("\t");
if (i%SPACELEFT==0)
{
printf("%d ",b);
b++;
}
else
printf(" ");
for (int j=0; j<LIGNE_COLONNE;j++)
{
if ((i%SPACELEFT==0)&&(j%SPACELEFT==0)) /* le cas où mat[i][j] est une intersection*/
{
/*if (i==*x && j==*y) /*tester si les indices coincident avec ceux choisis par le joueur
{
if (mat[*x][*y]=='0') /*tester si l'intersection ets vide cad contient '0'*
{
mat[*x][*y]=jeton;
}
else
{
printf("\tLa place est deja occupee!");
choix_pion(joueur,jeton,x,y,lettres,nombres);/*on lui demande de réexprimer
son choix où placer son pion
break;
}
} */
printf("%c ",mat[i][j]);
}
else if ((i%SPACELEFT==0)&&(j%SPACELEFT!=0))
printf("* ");
else if ((i%SPACELEFT!=0)&&(j%SPACELEFT!=0))
printf(" ");
else if ((i%SPACELEFT!=0)&&(j%SPACELEFT==0))
printf("* ");
}
printf("\n");
}
return;
}
Well, I refactored the code a bit and I get the following output:
A B C D E F G H I
Since I did not know how to define TAILLE_MATRICE I just assigned 64
That's the code for anyone wanting to try it out:
#include<stdio.h>
#define DIMENSION 9
#define SPACELEFT 2
#define TAILLE_MATRICE 64
int main(char mat[][TAILLE_MATRICE], int *x, int *y,char jeton,char
*joueur,char lettres[],char nombres[])
{
int a=0;
int b=1;
const int LIGNE_COLONNE=(SPACELEFT-1)*(DIMENSION-1)+ DIMENSION;
printf("\t");
printf(" ");
for(int j=0;j<DIMENSION;j++)
{
printf("%c", 'A'+a);
a++;
for (int k=0; k<(2*SPACELEFT-1);k++)
{
printf(" "); /*5 spaces 5= 2*SPACELEFT-1 */
}
}
printf("\n");
for (int i=0;i<LIGNE_COLONNE;i+=SPACELEFT)
{
for (int j=0;j<LIGNE_COLONNE;j+=SPACELEFT)
{
mat[i][j]='0';
}
}
mat[7][8]='A';
for (int i=0;i<LIGNE_COLONNE;i++)
{
printf("\t");
if (i%SPACELEFT==0)
{
printf("%d ",b);
b++;
}
else
printf(" ");
for (int j=0; j<LIGNE_COLONNE;j++)
{
if ((i%SPACELEFT==0)&&(j%SPACELEFT==0))
{
printf("%c ",mat[i][j]);
}
else if ((i%SPACELEFT==0)&&(j%SPACELEFT!=0))
printf("* ");
else if ((i%SPACELEFT!=0)&&(j%SPACELEFT!=0))
printf(" ");
else if ((i%SPACELEFT!=0)&&(j%SPACELEFT==0))
printf("* ");
}
printf("\n");
}
return 0;
}

Problem with array inside a function C segmentation failed

I have this code (Sorry the spanish)
In the "perm()" function, if i use array, to put whatever is in "a", in the array, the console throw me segmentation failed, but when i only print "a", i don't have any issue, so i don't know how to use an array to save the permutations and then print it, not just print it in the function
`
/*
Cree un programa en C el cual solicite a un usuario una palabra de largo n (4 ó 5).
El programa debe generar todas las permutaciones de sus letras, por ejemplo, si el usuario ingresa
la palabra GATO, el programa deberá almacenar en una matriz y posteriormente mostrar las
siguientes combinaciones de letras
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//Funcion Factorial
int fact(int n){
int i, mult;
i=n;
mult=1;
if (n==0){
mult=1;
}
else{
while (i>0){
mult=mult*i;
i=i-1;
}
}
return mult;
}
//Funcion Intercambiar
void cambio(char *a, char *b){
char aux;
aux=*a;
*a=*b;
*b=aux;
}
//Funcion Permutar
char **matriz;
int m=0;
void perm(char *a, int i, int n){
int j;
if (i==n){
matriz[m]=a; //With this i have a problem
printf("%s\n", a);
m=m+1;
}
else{
j=i;
while (j<=n){
cambio((a+i), (a+j));
perm(a, i+1, n);
cambio((a+i), (a+j));
j=j+1;
}
}
}
//Funcion principal
int main(){
/* Pedirle la palabra al usuario y calcular el largo de esta */
char *palabra;
printf("Ingrese una palabra: ");
scanf("%s", palabra); //Tengo la palabra
int largo=0;
while (palabra[largo]){
largo=largo+1; //Tengo largo de la palabra
}
/* Pasar la palabra a un arreglo dinámico */
char *letras=(char*)malloc(sizeof(char*)*largo);
int i=0;
while (i<largo){
letras[i]=palabra[i];
i=i+1;
}
/* Sacar la cantidad de permutaciones */
int nper;
nper=fact(largo); //Tengo la cantidad de permutaciones
/* Armar la matriz */
char **matriz=(char**)malloc(sizeof(char*)*nper);
i=0;
while (i<nper){
matriz[i]=(char*)malloc(sizeof(char)*largo);
i=i+1;
}
/* Permutar(??) */
perm(letras, 0, largo-1);
/*Imprimir Permutaciones*/
i=0;
printf("Las %d permutaciones son\n", nper);
printf("%d\n", m);
printf("%c\n", letras[2]);
while (i<nper){
printf("%s", matriz[i]);
i=i+1;
}
/* Liberar memoria */
i=0;
while (i<nper){
free(matriz[i]);
i=i+1;
}
free(matriz);
free(letras);
return 0;
}

why does this break the program? (i am running in c) tablero = (int *)malloc( sizeof(int)*fil*col );

so... i am working in a hanoi towers program and this breaks the whole thing... may you help me please? This is my first question, and i don't really know how does this work :( it breaks when declaring "tablero" in the main function
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void imprime(int *tab, int fil, int col, int ultNum, char name[64], char caso, int count, int filOrig, int filDest) {
/*
Precondición:
*tab Puntero a una matriz de tipo entero.
fil Entero que indica el numero de filas de la matriz.
col Entero que indica el numero de columnas de la matriz.
disc Parámetro de tipo entero que indica el numero de discos usados.
ultNum Entero que indica el numero que esta usando el disco mas grande.
*/FILE *f;
switch (caso) {
case 119:
f = fopen(name, "w");
break;
case 97:
f = fopen(name, "a");
break;
default:
printf("no file");
break;
};
int j, c;
int i, esp;
printf("Move %d to %d, movement number %d \n", filOrig, filDest, count);
for (c = col - 1; c >= 0; c--) {
for (j = 0; j < fil; j++) {
esp = (ultNum - tab[col * j + c]) / 2;
// Espacios a la izquierda
for (i = 0; i < esp; i++) {
fprintf(f, " ");
printf(" ");
};
// Imprime los comodines
for (i = 0; i < tab[col * j + c]; i++) {
fprintf(f, "*");
printf("*");
};
// Espacios a la derecha
for (i = 0; i < esp; i++) {
fprintf(f, " ");
printf(" ");
}
fprintf(f, "\t");
printf("\t");
};
fprintf(f, "\r\n");
printf("\n");
};
printf("\n \n \n \n \n");
fprintf(f, " \r\n \r\n \r\n \r\n \r\n ");
fclose(f);
count++;
};
void mueveDisco(int *tab, int fil, int col, int ultNum, int filOrig, int filDest, char name[64], char caso, int count) {
/*
Precondición:
*tab Puntero a una matriz de tipo entero.
fil Entero que indica el numero de filas de la matriz.
col Entero que indica el numero de columnas de la matriz.
disc Parámetro de tipo entero que indica el numero de discos usados.
ultNum Entero que indica el numero que esta usando el disco mas grande.
filOrig Entero que indica el numero de fila de la matriz en la cual hay que coger el numero/disco
filDest Entero que indica el numero de fila de la matriz en la cual hay que dejar el numero/disco.
Poscondición:
Se mueve el disco y se llama a la función que imprime el tablero.
*/
int cO = col - 1, cD = col - 1;
// Se busca el disco que se encuentre mas arriba y por lo tanto el mas pequeño de la fila de origen.
while (cO >= 0 && tab[col * filOrig + cO] == 0) {
cO--;
};
if (cO < 0)
cO = 0;
// Ahora se calcula cual es la posición libre mas arriba de la fila de destino
while (cD >= 0 && tab[col * filDest + cD] == 0) {
cD--;
};
// Se mueve el disco de la fila de origen a la de destino:
tab[col * filDest + cD + 1] = tab[col * filOrig + cO];
tab[col * filOrig + cO] = 0;
// Se imprime el tablero:
imprime(tab, fil, col, ultNum, name, caso, count, filOrig, filDest);
};
void hanoi(int *tab, int fil, int col, int disc, int ultNum, int O, int A, int D, char name[64], char caso, int count) {
/*
Precondición:
*tab Puntero a una matriz de tipo entero.
fil Entero que indica el numero de filas de la matriz.
col Entero que indica el numero de columnas de la matriz.
disc Parámetro de tipo entero que indica el numero de discos usados.
ultNum Entero que indica el numero que esta usando el disco mas grande.
O,A,D Tres enteros que indican la fila desde donde se ha de coger el disco y a donde se ha de traspasar. La primera vez que se llama a hanoi tienen los valores de: 0 ,1 y 2 respectivamente.
Poscondición:
Se llama recursivamente a hanoi hasta resolver el tablero.
*/
if (disc == 1) {
// Se borra la pantalla, se imprime la tabla y se hace una pausa que varia dependiendo del numero de discos:
mueveDisco(tab, fil, col, ultNum, O, D, name, caso, count);
if (col <= 5) system("sleep 0.8");
else if (col <= 10) system("sleep 0.3");
else if (col <= 15) system("sleep 0.06");
else if (col > 15) system("sleep 0.02");
} else {
hanoi(tab, fil, col, disc - 1, ultNum, O, D, A, name, caso, count);
mueveDisco(tab, fil, col, ultNum, O, D, name, caso, count);
if (col <= 5) system("sleep 0.8");
else if (col <= 10) system("sleep 0.3");
else if (col <= 15) system("sleep 0.06");
else if (col > 15) system("sleep 0.02");
hanoi(tab, fil, col, disc - 1, ultNum, A, O, D, name, caso, count);
};
};
int main(int argc, char *argv[]) {
int k; /* Value for the "-q" optional argument. */
time_t t = time(NULL);
struct tm *tm = localtime(&t);
char s[64];
strftime(s, sizeof (s), "%c", tm);
printf("%s\n", s);
char name[64];
int fil = 3, col = 3, *tablero = NULL;
int j, c, disc = 1, ultNum;
int count = 0;
char caso;
int i;
/*
printf("Escoja nombre del fichero :");
scanf("%s", &name);
printf( "Indique el numero de discos: " );
scanf( "%i", &col );
printf("Seleccione operacion en fichero: \n1. Añadir texto al archivo\n2. Reescribir archivo si existe\n3. No imprimir en archivo\n");
scanf ("%d", &caso);
*/
for (i = 0; i < argc; i++) {
if (strcmp(argv[i], "-d") == 0) {
col = atoi(argv[i + 1]);
}
if (strcmp(argv[i], "-f") == 0) {
sprintf(name, "%s.txt", argv[i + 1]);
}
if (strcmp(argv[i], "-o") == 0) {
caso = argv[i + 1];
}
}
printf("hace el for\n");
FILE *f;
printf("hace el file\n");
switch (caso) {
case 119:
f = fopen(name, "w");
printf("escribí la w\n");
break;
case 97:
f = fopen(name, "a");
printf("escribi la a\n");
break;
default:
printf("no file\n");
break;
};
printf("hace el switch\n");
tablero = (int *) malloc(sizeof (int)*fil * col); //peta aqui
printf("hice el sizeof");
// Resetea las torres poniendo "los discos" en una de ellas y 0 en el resto.
for (j = 0; j < fil; j++)
for (c = col - 1; c >= 0; c--)
if (j == 0) {
tablero[col * j + c] = disc;
disc += 2;
} else
tablero[col * j + c] = 0;
ultNum = disc;
fprintf(f, " Comand line entered: \r\n Number of towers : %d \n\n Number of discs: : %d \n\n Output filename : %s \r\n \r\n Init time : %s \r\n \r\n \r\n", fil, col, name, s);
fclose(f);
printf(" \n \n Comand line entered: \n Number of towers : %d \n Number of discs: : %d \n Output filename : %s \n \n Init time : %s \n \n \n", fil, col, name, s);
// Se imprime el tablero antes de iniciar ningún movimiento:
system("clear");
imprime(tablero, fil, col, ultNum, name, caso, count, 0, 0);
system("sleep 1");
// Se llama a hanoi para comenzar "la partida":
hanoi(tablero, fil, col, col, ultNum, 0, 1, 2, name, caso, count);
f = fopen(name, "a");
fprintf(f, " \r\n \r\n Fin Time : %s", s);
fclose(f);
return (0);
};
It's very unclear what you mean, if it's a compilation error then that doesn't make sense connected to that particular line, since there are other errors that already prevent the code from building.
If it's a run-time error (it crashes when run), that makes no sense either since the code doesn't build.
A better way to write that particular line is:
tablero = malloc(fil * col * sizeof *tablero);
This
Avoids the cast of malloc()'s return value
Uses sizeof on the target pointer, avoiding repeating the type

Errors while creating a graph in C

I'm trying to generate a graph from a matrix but I'm having some problems, here is the code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_N 10
#define MAX_P 20
//Declaracion del TDA cola
typedef struct Node {
int rafaga;
int id;
struct Node *dret;
struct Node *esq;
int fiscals;
int funcionaris;
int advocats;
} tipoNodo;
typedef tipoNodo *pNodo; // tipo para declarar nodos a un entero
int nodes = 0, funcionarisTotals = 0, advocatsTotals = 0, fiscalsTotals = 0;
Node llista[MAX_N];
int graf[MAX_N*2][3];
void crearGraf(int graf[MAX_N*2][3]) {
FILE *pf;
char caracter; // variable de tipo caracter que va a servir para almacenar los caracteres leidos del archivo
int valor, o, d;
pf = fopen ("graf.txt","r"); // se abre el archivo en forma de lectura
if (!pf) { //en el caso que no se pueda abrir el archivo se manda un mensaje de error
printf ("ERROR: el fichero no existe o no se puede abrir\n");
exit(-1); //mensaje "presiona una tecla para continuar"
}
else {
int arestes = 0;
while (!feof (pf)) {
int j = 0;
nodes = int ((caracter=fgetc(pf))-'0');
printf ("El graf te %d\n nodes", nodes);
for(int i = 0 ; i < nodes ; i++) {
llista->[i].id = i;
llista.[i].rafaga = 1;
}
caracter = fgetc(pf);
o = int ((caracter = fgetc(pf))-'0'); //nodo origen
caracter = fgetc(pf);
d = int ((caracter = fgetc(pf))-'0');//nodo destino
caracter = fgetc(pf);
valor = int ((caracter =fgetc(pf))-'0');//pes de l'aresta
if (o < 0 || d < 0 || valor < 0) break;
printf ("%d %d %d\n",o,d,valor);
graf[o][d] = valor; // es guarda el pes de l'aresta que va de X -> Y a la matriu
arestes++;
}
fclose (pf);//se cierra el fichero
for(int j = 0; j<arestes ; j++) {
if(j == 0) {
llista[graf[j][0]]->dret = llista[graf[j][1]]; // enllacem l'aresta primera
}
if(j != 0 && (graf[j-1][0] == graf[j][0])) {
llista[graf[j][0]]->esq = llista[graf[j][1]]; // enllacem l'aresta esquerra
}
else {
llista[graf[j][0]]->dret = llista[graf[j][1]]; // enllacem l'aresta dreta
}
}
}
}
int main (void)
{
int graf[MAX_N][MAX_N];
crearGraf(graf);
return 0;
}
The error I'm getting is:
SC.c:57: error: expected unqualified-id before ‘[’ token
SC.c:58: error: expected unqualified-id before ‘[’ token
Which are these two lines in the for loop:
for(int i = 0 ; i < nodes ; i++) {
llista->[i].id = i;
llista.[i].rafaga = 1;
}
I think I don't understand really the TYPE of variable I'mworking with here.
Could someone give me a hand? I've been trying to look for similar problems but I couldn't fix mine.
Thanks!
Change these 2 lines to
llista[i].id = i;
llista[i].rafaga = 1;
and you will be accessing the things that you appear to be trying to access.
Using the -> operator dereferences a pointer while it appears that you just want to access array elements which is done as above. I cannot speak for the correctness of the remainder of your code but these changes at the least should remove your compiler errors.

Trouble assigning pointers from a table in C

I'm trying to create a graph from a file, I manage to read the file and save all the info in a matrix, however, when I try to read from the matrix and link the different nodes between them I get the segmentation fault error.
Here is the code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_N 10
#define MAX_P 20
//Declaracion del TDA cola
typedef struct Node {
int rafaga;
int id;
struct Node *dret;
struct Node *esq;
int fiscals;
int funcionaris;
int advocats;
} tipoNodo;
typedef tipoNodo *pNodo; // tipo para declarar nodos a un entero
int nodes = 0, funcionarisTotals = 0, advocatsTotals = 0, fiscalsTotals = 0;
Node llista[MAX_N];
int graf[MAX_N*2][3];
void crearGraf(int graf[MAX_N*2][3]) {
FILE *pf;
char caracter; // variable de tipo caracter que va a servir para almacenar los caracteres leidos del archivo
int valor, o, d;
pf = fopen ("graf.txt","r"); // se abre el archivo en forma de lectura
if (!pf) { //en el caso que no se pueda abrir el archivo se manda un mensaje de error
printf ("ERROR: el fichero no existe o no se puede abrir\n");
exit(-1); //mensaje "presiona una tecla para continuar"
}
else {
int arestes = 0;
nodes = int ((caracter=fgetc(pf))-'0');
printf ("El graf te %d nodes\n", nodes);
printf("abans del for de les rafagues\n");
for(int i = 0 ; i < nodes ; i++) {
printf("abans de posar la id\n");
llista[i].id = i;
printf("abans de posar la rafaga\n");
llista[i].rafaga = 1;
}
printf("despres del for de les rafagues\n");
while (!feof (pf)) {
int j = 0;
caracter = fgetc(pf);
o = int ((caracter = fgetc(pf))-'0'); //nodo origen
caracter = fgetc(pf);
d = int ((caracter = fgetc(pf))-'0');//nodo destino
caracter = fgetc(pf);
valor = int ((caracter =fgetc(pf))-'0');//pes de l'aresta
if (o < 0 || d < 0 || valor < 0) break;
printf ("%d %d %d\n",o,d,valor);
graf[arestes][0] = o; // es guarda el pes de l'aresta que va de X -> Y a la matriu
graf[arestes][1] = d;
graf[arestes][2] = valor;
printf("He llegit l'aresta %d\n", arestes);
arestes++;
}
printf("Fora del while de llegir fitxer\n");
fclose (pf);//se cierra el fichero
printf("Abans del for de les arestes, fare %d voltes\n",arestes);
for(int j = 0; j<arestes ; j++) {
printf("Posant l'aresta del node %d al %d\n", graf[j][0],graf[j][1]);
if(j == 0) {
printf("posant la primera aresta de pes %d\n",graf[j][2]);
*llista[graf[j][0]].dret = llista[graf[j][1]]; // enllacem l'aresta primera
printf("primera aresta posada\n");
}
if(j != 0 && (graf[j-1][0] == graf[j][0])) {
printf("posant l'aresta del node %d and node %d com a fill esquerra\n",graf[j][0],graf[j][1]);
*llista[graf[j][0]].esq = llista[graf[j][1]]; // enllacem l'aresta esquerra
}
else {
printf("posant l'aresta del node %d and node %d com a fill dret\n",graf[j][0],graf[j][1]);
*llista[graf[j][0]].dret = llista[graf[j][1]]; // enllacem l'aresta dreta
}
}
}
}
int main (void)
{
crearGraf(graf);
return 0;
}
The error I'm getting is when I try to link the first edge of the graph, in this line:
*llista[graf[j][0]].dret = llista[graf[j][1]]; // enllacem l'aresta primera
I think I'm messing up the type of the different variables. Also, all the printfs you see are to confirm that everything works just fine untill this point.
What am I missing again?
Thanks guys!
You are de-referencing a null pointer when you *llista[graf[j][0]].dret (because dret is a pointer that is not set yet..)
i think what you meant to do is:
llista[graf[j][0]].dret = &llista[graf[j][1]];

Resources