Maison développement back-end C++ Comment résoudre l'erreur d'exécution C++ : « argument invalide » ?

Comment résoudre l'erreur d'exécution C++ : « argument invalide » ?

Aug 27, 2023 pm 01:54 PM
c++ invalid argument 运行时错误

如何解决C++运行时错误:'invalid argument'?

Comment résoudre l'erreur d'exécution C++ : « argument invalide » ?

Lors de l'écriture de programmes en C++, nous rencontrons souvent diverses erreurs. L'une des erreurs courantes est l'erreur d'exécution : « argument invalide ». Cette erreur signifie généralement que l'un des paramètres que nous avons transmis à la fonction ou à la méthode n'a pas répondu aux attentes, ce qui a empêché le programme d'effectuer l'opération correcte.

Alors, lorsque nous rencontrons cette erreur, comment devons-nous la résoudre ? Ci-dessous, nous illustrerons avec un exemple de code.

Tout d'abord, considérons l'exemple de code suivant :

#include <iostream>
#include <vector>

int main() {
    std::vector<int> nums = {1, 2, 3, 4, 5};
    int index = 10;

    int result = nums.at(index); // 这里可能会引发运行时错误

    std::cout << "Result: " << result << std::endl;

    return 0;
}
Copier après la connexion

Dans cet exemple, nous avons utilisé un conteneur std::vector pour stocker des entiers et essayons d'accéder à l'un de ses éléments par index . Cependant, nous utilisons un index en dehors de la portée du conteneur (10), ce qui peut provoquer une erreur d'exécution. std::vector容器存储了一些整数,并且尝试通过索引访问其中的一个元素。然而,我们使用了一个超出了容器范围的索引(10),这可能会导致运行时错误。

当我们运行这段代码时,可能会得到类似于以下的输出:

terminate called after throwing an instance of 'std::out_of_range'
  what():  vector::_M_range_check: __n (which is 10) >= this->size() (which is 5)
Copier après la connexion

这就是一个典型的'invalid argument'的运行时错误。那么,我们应该如何解决它呢?

解决这个问题的一种方法是在访问容器元素之前,先进行边界检查。我们可以使用std::vector提供的成员函数size()获取容器中存储的元素个数,然后与要访问的索引进行比较,确保索引在有效范围内。

下面是修改后的代码示例:

#include <iostream>
#include <vector>

int main() {
    std::vector<int> nums = {1, 2, 3, 4, 5};
    int index = 10;

    if (index >= 0 && index < nums.size()) {
        int result = nums.at(index);
        std::cout << "Result: " << result << std::endl;
    } else {
        std::cout << "Invalid index" << std::endl;
    }

    return 0;
}
Copier après la connexion

在修改后的代码中,我们添加了一个if语句来检查索引的有效性。只当索引在范围内时,才会执行访问操作。否则,将输出一个“Invalid index”的消息。

通过这种方式,我们可以避免运行时错误:'invalid argument'。当我们使用std::vector

Lorsque nous exécutons ce code, nous pouvons obtenir un résultat similaire à celui-ci :

rrreee

Il s'agit d'une erreur d'exécution typique d'un « argument invalide ». Alors, comment devrions-nous le résoudre ?

Une façon de résoudre ce problème consiste à effectuer une vérification des limites avant d'accéder à l'élément conteneur. Nous pouvons utiliser la fonction membre size() fournie par std::vector pour obtenir le nombre d'éléments stockés dans le conteneur, puis le comparer avec l'index auquel accéder pour garantir que l'index est valide dans la plage.

Voici l'exemple de code modifié : 🎜rrreee🎜Dans le code modifié, nous avons ajouté une instruction if pour vérifier la validité de l'index. L'opération d'accès ne sera effectuée que si l'index est dans la plage. Sinon, un message « Index invalide » sera affiché. 🎜🎜De cette façon, nous pouvons éviter l'erreur d'exécution : "argument invalide". Lorsque nous utilisons des conteneurs tels que std::vector, nous devons effectuer des vérifications des limites pour nous assurer que l'index ne dépasse pas la plage valide du conteneur. 🎜🎜Bien sûr, dans la programmation réelle, nous rencontrerons également des erreurs « argument invalide » dans diverses autres situations. Par exemple, lorsque nous transmettons un pointeur ou une référence invalide à une fonction, ou fournissons des paramètres inappropriés lors de l'appel d'une fonction, etc. Les solutions varieront également pour ces situations. 🎜🎜En résumé, lorsque nous rencontrons l'erreur d'exécution C++ : 'argument invalide', nous devons d'abord vérifier la validité des paramètres pour nous assurer qu'ils répondent aux attentes de la fonction ou de la méthode. Si nécessaire, ajoutez des protections telles que des contrôles de limites ou une validation des entrées pour éviter ce type d'erreur. 🎜🎜Grâce aux exemples de code et aux méthodes ci-dessus, nous espérons aider les lecteurs à mieux comprendre et résoudre l'erreur d'exécution C++ : « argument invalide », et à améliorer la robustesse et la stabilité du programme. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Conception sécurisée de structures de données en programmation simultanée C++ ? Conception sécurisée de structures de données en programmation simultanée C++ ? Jun 05, 2024 am 11:00 AM

Conception sécurisée de structures de données en programmation simultanée C++ ?

La disposition des objets C++ est alignée sur la mémoire pour optimiser l'efficacité de l'utilisation de la mémoire La disposition des objets C++ est alignée sur la mémoire pour optimiser l'efficacité de l'utilisation de la mémoire Jun 05, 2024 pm 01:02 PM

La disposition des objets C++ est alignée sur la mémoire pour optimiser l'efficacité de l'utilisation de la mémoire

Comment implémenter un comparateur personnalisé en C++ STL ? Comment implémenter un comparateur personnalisé en C++ STL ? Jun 05, 2024 am 11:50 AM

Comment implémenter un comparateur personnalisé en C++ STL ?

Similitudes et différences entre Golang et C++ Similitudes et différences entre Golang et C++ Jun 05, 2024 pm 06:12 PM

Similitudes et différences entre Golang et C++

Comment implémenter le Strategy Design Pattern en C++ ? Comment implémenter le Strategy Design Pattern en C++ ? Jun 06, 2024 pm 04:16 PM

Comment implémenter le Strategy Design Pattern en C++ ?

Comment copier un conteneur STL C++ ? Comment copier un conteneur STL C++ ? Jun 05, 2024 am 11:51 AM

Comment copier un conteneur STL C++ ?

Quels sont les principes d'implémentation sous-jacents des pointeurs intelligents C++ ? Quels sont les principes d'implémentation sous-jacents des pointeurs intelligents C++ ? Jun 05, 2024 pm 01:17 PM

Quels sont les principes d'implémentation sous-jacents des pointeurs intelligents C++ ?

Comment implémenter une programmation multithread C++ basée sur le modèle Actor ? Comment implémenter une programmation multithread C++ basée sur le modèle Actor ? Jun 05, 2024 am 11:49 AM

Comment implémenter une programmation multithread C++ basée sur le modèle Actor ?

See all articles