Salut à tous.
Bon, toujours dans un problème de lecture de fichiers, j'ai fais le programme suivant :
Tout ce petit bazar appartient à une classe "jour", qui n'a qu'en attribut un vector de trajectoires. J'ai déclaré dans un autre fichier une classe trajectoire est une classe qui prends en attribut un vector de points, une chaine de caractères et trois floats juste pour faire un code couleur.
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 jour::jour(string directoryName) { string s = "/mnt/nas02/vista/fredarch/visu/" + directoryName + "t_traj.txt"; cout << s << endl; ifstream file(s.c_str(), ios::in); trajectoire t; string str; vector<string> vec; int i=0; if (!file) //Si le fichier n'est pas lu... { cerr << "setDataTable : can't read " << directoryName << "." << endl; throw std::runtime_error("file not opened: "+ directoryName); //Erreur ! + envoi d'erreur. } string line; while (getline(file,line) && i< 100) //Tant qu'on lit des lignes dans le fichier. { istringstream iss(line); cout << i << endl; while (getline(iss, str, ' ')) { if (str != "") { vec.push_back(str); } } t.setTrajectory("/mnt/nas02/vista/fredarch/visu/" + directoryName + vec.at(19) + ".txt"); //cout << vec.at(19) << endl; t.setCallSign(atoi(vec.at(4).c_str())); traj.push_back(t); vec.clear(); i++; } }
Mon code compile nickel et s'exécute bien, à quelques problèmes près. Rien à signaler jusqu’à ce que j'atteigne 1024 éléments. D'ailleurs si je choisis de ne prendre que les 100 premiers éléments par exemple le programme s'effectue sans soucis. A partir de 1024 éléments (une puissance de 2, comme par hasard), mon PC Debian commence à subir quelques ralentissements. A partir les 2048 éléments (1024 * 2, cooooooomme par hasard) le programme plante et finis par être "tué". Bref, j'ai pensé au début que j'avais juste fait une grosse pompe à CPU, mais on dirait plus au final un problème d'allocation.
Comment puis-je résoudre ce problème ?
Merci d'avance pour votre réponse.
Partager