Bonjour,
J'ai une double boucle. La première permet de changer de chaine de caractères et la deuxième parcourt cette chaine. Ma deuxième boucle imbriquée varie donc de 0 à strlen(string)+1 si on prend une inégalité stricte.
Mon problème est le suivant : quand je lance la compilation, le programme s'execute et j'obtiens le résultat attendu.
Pourtant, et c'est là que ça devient intéressant, quand je lance la compilation avec le debugger, je reçois le signal SIGSEV.
En effet, à un moment donné, strlen retourne une valeur plus grande que celle prévue.
Sans utiliser le debugger, strlen retourne les bonnes valeurs.
Avec le debugger, strlen retourne une mauvaise valeur pour une chaine bien précise.
D'ailleurs, je note qu'il renvoie le double de la valeur en question. Je ne sais pas si ça à son importance...
Voici ce que j'obtiens :
Avec le debugger
Sans le debugger
La chaine qui devrait faire 8 caractères en possède apparemment 17-1 avec le debugger !
La fonction qui me pose problème avec la ligne en rouge qui est le lieu de l'erreur :
Merci d'avance.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 t_adjacencyMatrix *getAdjacencyMatrixStructure( t_csv *csv ) { /* Création de la structure de stockage des données */ t_adjacencyMatrix *adjacencyMatrix = createAdjacencyMatrixStructure( csv->line-csv->firstDataLine+1 ); /* La boucle commence à la 4ème ligne dans le fichier csv soit la 3ème ligne dans le tableau */ size_t i_start = csv->firstDataLine-1; size_t atoiv = 0; /* On parcourt chaque ligne de la matrice d'adjacence */ size_t i; for ( i=i_start ; i< csv->line ; i++ ) { /* Chaine de caractères pour stocker le sommet (colonne) dont le sommet courant (ligne) est adjacent */ char valueIsString[5]; /* Variable pour compter le déplacement dans valueIsString */ size_t offset = 0; /* Pour chaque sommet, on regarde les sommets qui lui sont adjacents */ size_t size = stringLength(csv->spreadSheet[i][csv->adjacencyDataRow-1])+1; printf("\n size = %d", size); //getchar(); size_t j; for ( j=0 ; j<size ; j++ ) { if ( csv->spreadSheet[i][csv->adjacencyDataRow-1][j] != ',' ) { valueIsString[offset] = csv->spreadSheet[i][csv->adjacencyDataRow-1][j]; } if ( csv->spreadSheet[i][csv->adjacencyDataRow-1][j] == ',' || csv->spreadSheet[i][csv->adjacencyDataRow-1][j] == '\0') { valueIsString[offset] = '\0'; offset=-1; atoiv = atoi(valueIsString)-1; //printf("\n %s %d %d", valueIsString, i-i_start, atoi(valueIsString)-1); adjacencyMatrix->matrix[i-i_start][atoi(valueIsString)-1] = 1; } offset++; } } /* On renvoie la structure */ return adjacencyMatrix; }
Partager