Bonjour à tous,
Je sais que c'est un problème assez classique, mais, malgré mes recherches, je n'ai trouvé aucune solution. En fait la compilation de mon code se passe avec succès, mais lors de l'exécution j'ai ce message d'erreur qui s'affiche:
Exception non gérée à 0x00a3a6f9 dans graphe.exe*: 0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0xcccccccc.
J'utilise Visual Studio 2010 et voici la fonction utilisée:
Voici maintenant mon fichier main:
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67 graphe::graphe(char* NomFichier) { ifstream fichier(NomFichier); string ligne; int num = 1; while(getline(fichier, ligne) && num<=2) { if(num == 1) // Si num = 1, alors on lit la première ligne du fichier qui contient le tableau fs { int j = 0; for(int i=0; i<ligne.length() ; i++) { if(ligne[i]!='\n') { string tmp; tmp=ligne[i]; if(i+1<ligne.length()) i++; // Pour être positionné au caractère suivant while(ligne[i]!=';' && i<ligne.length()) { tmp = tmp+ligne[i]; i++; } if(i==0) { fs=(int*)malloc(atoi(tmp.c_str())+1); } fs[j]= atoi(tmp.c_str()); j++; } } } else { if(num==2) // Si num=2, alors il s'agit de la 2è ligne du fichier qui contient le tableau aps { int j = 0; for(int i=0; i<ligne.length() ; i++) { if(ligne[i]!='\n') { string tmp; tmp=ligne[i]; if(i+1<ligne.length()) i++; // Pour être positionné au caractère suivant while(ligne[i]!=';' && i<ligne.length()) { tmp = tmp+ligne[i]; i++; } if(i==0) { aps=(int*)malloc(atoi(tmp.c_str())+1); } aps[j]= atoi(tmp.c_str()); j++; } } } } num++; } fichier.close(); }
Je précise que fs[0] contient le nombre d'élément du tableau fs -1 (sans la première case donc) et idem pour le tableau aps.
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 #include "graphe.h" #include <cstdlib> #include <iostream> using namespace std; int main(int argc, char *argv[]) { char* NomFichier = "essai.txt"; graphe g(NomFichier); for(int i=1; i<=g.fs[0];i++) cout<< g.fs[i] << " "; cout<<endl; for(int i=1; i<=g.aps[0];i++) cout<< g.aps[i] << " "; system("PAUSE"); return EXIT_SUCCESS; }
Ce que la fonction graphe est censé faire est, à partir du fichier txt, mettre les nombres de la 1è ligne dans le tableau fs et ceux de la deuxième dans le tableau aps. Ces nombres sont séparés par des points virgules.
Merci d'avance.
Partager