Maison > Article > développement back-end > Comment résoudre l’erreur d’exécution C++ : « argument invalide » ?
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; }
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)
这就是一个典型的'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; }
在修改后的代码中,我们添加了一个if
语句来检查索引的有效性。只当索引在范围内时,才会执行访问操作。否则,将输出一个“Invalid index”的消息。
通过这种方式,我们可以避免运行时错误:'invalid argument'。当我们使用std::vector
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 membresize()
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!