Maison > développement back-end > C++ > le corps du texte

Comment résoudre l'erreur d'exécution C++ : « violation d'accès » ?

WBOY
Libérer: 2023-08-27 16:00:46
original
1188 Les gens l'ont consulté

如何解决C++运行时错误:'access violation'?

Comment résoudre l'erreur d'exécution C++ : « violation d'accès » ?

En programmation C++, les erreurs d'exécution sont l'un des défis auxquels nous sommes souvent confrontés. L'une des erreurs courantes est la « violation d'accès », qui se produit généralement lorsque vous tentez d'accéder à un emplacement mémoire illégal. Cet article décrit certaines causes et solutions courantes, et fournit des exemples de code correspondants.

  1. Accès au pointeur nul

L'accès au pointeur nul est l'une des causes les plus courantes d'erreurs de « violation d'accès ». Cette erreur se produit lorsque nous essayons d'accéder à la mémoire pointée par un pointeur nul.

Voici un exemple de code :

int* ptr = nullptr;
*ptr = 10; // 此处会发生'access violation'错误
Copier après la connexion

Solution :
Avant d'accéder au pointeur, nous devons d'abord vérifier s'il est nul. Ceci peut être réalisé en utilisant des instructions ou des assertions conditionnelles.

int* ptr = nullptr;
if (ptr != nullptr) {
    *ptr = 10; // 在访问指针之前先进行空指针检查
}
Copier après la connexion

Ou utilisez des assertions pour la vérification du pointeur nul

int* ptr = nullptr;
assert(ptr != nullptr); // 运行时将会中断执行
*ptr = 10;
Copier après la connexion
  1. Accès hors limites du tableau

Une autre cause courante d'erreurs de « violation d'accès » est l'accès hors limites du tableau. Cette erreur se produit lorsque nous essayons d'accéder à un index en dehors du tableau.

Voici un exemple de code :

int arr[5];
for (int i = 0; i <= 5; ++i) {
    arr[i] = i; // 此处会发生'access violation'错误
}
Copier après la connexion

Solution :
Lors de l'accès au tableau, nous devons nous assurer que la valeur de l'index se trouve dans la plage valide du tableau.

int arr[5];
for (int i = 0; i < 5; ++i) {
    arr[i] = i; // 索引值在有效范围内
}
Copier après la connexion
  1. Accès au pointeur d'objet

Une autre erreur courante consiste à accéder via un pointeur d'objet qui a été supprimé ou libéré.

Voici un exemple de code :

class MyClass {
public:
    void doSomething() { /* ... */ }
};

MyClass* ptr = new MyClass;
delete ptr;
ptr->doSomething(); // 此处会发生'access violation'错误
Copier après la connexion

Solution :
Avant d'utiliser un pointeur, vous devez vous assurer que l'objet vers lequel il pointe existe.

MyClass* ptr = new MyClass;
if (ptr != nullptr) {
    ptr->doSomething(); // 在使用指针之前确认其指向的对象存在
}
Copier après la connexion
  1. Accès à la mémoire libérée

En programmation C++, nous libérons parfois manuellement des zones de mémoire allouées dynamiquement. Cependant, si nous continuons à utiliser le pointeur vers la mémoire après l'avoir libérée, une erreur de « violation d'accès » se produira.

Voici un exemple de code :

int* ptr = new int;
delete ptr;
*ptr = 10; // 此处会发生'access violation'错误
Copier après la connexion

Solution :
Après avoir libéré la mémoire, il faut s'assurer que le pointeur pointant vers la mémoire n'est plus utilisé.

int* ptr = new int;
delete ptr;
ptr = nullptr; // 将指针置为空指针,避免误用
Copier après la connexion

Résumé : 
L'erreur « violation d'accès » est l'une des erreurs d'exécution courantes dans la programmation C++. Cet article fournit des causes et solutions courantes, ainsi que des exemples de code correspondants. Lors de la programmation en C++, nous devons soigneusement vérifier l’accès au pointeur et au tableau pour éviter de telles erreurs.

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!

Étiquettes associées:
source:php.cn
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal