Le but de mon programme est de lire les mots dans un fichier et de compter les occurrences de chaque mot. Voici le code:C++: erreur de segmentation (core dumped)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
vector<string> v, vdist;
string parola;
int j=0;
ifstream myfile("example.txt");
if (myfile.is_open()) {
cout << "file opened\n";
while (! myfile.eof()) {
myfile >> parola;
v.push_back(parola);
}
cout << "dimensione file: " << v.size() << endl;
for (int i=0; i< v.size(); i++) {
cout << i << " " << v[i] << endl;
}
sort(v.begin(),v.end());
for (int i=0; i<= v.size()-1; i++) {
if (v[i] != v[i+1]) {
vdist[j] = v[i];
cout << vdist[j] << endl;
j++;
}
vdist[j]= v[v.size()-1];
j++;
}
} else
cout << "file not opened\n";
return 0;
}
Tout ce que je veux faire est de créer un vecteur vdist
qui contient tous les mots distincts, et comptant pour chacun l'événement. Évidemment ce n'est pas la meilleure méthode mais c'est juste pour apprendre. La ligne qui génère une erreur de segmentation est la suivante:
vdist[j] = v[i];
Pourquoi est-ce qui se passe?
De plus, en règle générale, lorsque vous accédez à un conteneur, assurez-vous que le conteneur existe s'il s'agit d'un pointeur et que l'index n'est pas hors limite. Si le conteneur provient de la stl, vous pouvez utiliser itérateur pour l'itérer, c'est plus sûr. –
yesss !! je suis tellement stupide!! merci beaucoup, maintenant ça marche parfaitement! Merci encore! –