0
votes

Code permettant de trouver le nombre d'occurrences de l'élément le plus important dans une éventuelle erreur de segmentation

J'écris une fonction en C ++ qui prend un tableau de vecteur en tant que paramètre puis trouve le nombre d'occurrences de la plus grande valeur. J'ai écrit la fonction anniversaireCakecandles et la fonction principale comme ci-dessous. XXX

Veuillez consulter le code et me suggérer la raison (s) de l'erreur. Le compilateur me donne une erreur de segmentation. Merci.


5 commentaires

CIN >> A [I]; n'est pas la façon dont vous remplissez un vecteur . Vous avez besoin d'une variable temporaire et de push_back . Soit cela ou remplissez d'abord le vecteur avec des valeurs par défaut, puis vous pouvez écraser ces valeurs


Vous pouvez également initialiser le vecteur A à la taille complète prévue: vecteur a (n); .


@Unholysheep pouvez-vous s'il vous plaît donner la solution à l'aide de cette façon?


@Scheff veuillez aider avec la solution


Les deux solutions sont données dans la réponse ci-dessous. ;-)


3 Réponses :


2
votes

donné le code xxx pré>

a code> est vide; Accès aux éléments inexistants tels que A [i] code> conduit à UB, tout est possible. p>

Vous pouvez initialiser A code> contenant n code > éléments du début. p> xxx pré>

ou utilisez push_back code> pour insérer des éléments dans a code>. p>

size_t n;
cin>>n;
vector<int> a;
for(size_t i=0;i<n;++i) {
    int x;
    cin>>x;
    a.push_back(x);
}


1 commentaires

ub -> comportement non défini - le plus peur de chaque programmeur C ++. ;-)



0
votes

Lorsque vous utilisez le vecteur, nous devons ajouter des éléments à l'aide de push_back ou emplace_back . Afin de traverser le vecteur, utilisez des itérateurs de vecteur pour une sécurité d'exception en raison de l'accès à l'écart. xxx

Notez également que.end () est en fait le last_element + 1


0 commentaires

0
votes

vecteur a; pour (double i = 0; i CIN >> A [I]; Ce n'est pas le moyen d'entrer dans l'utilisation de vecteur A.Push_back (i); au lieu; et utilisez Auto pour traverser jusqu'à A.begin () jusqu'à A.end ()


0 commentaires