Maison >développement back-end >C++ >Comment résoudre l'erreur d'exécution C++ : « violation d'accès » ?
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.
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'错误
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; // 在访问指针之前先进行空指针检查 }
Ou utilisez des assertions pour la vérification du pointeur nul
int* ptr = nullptr; assert(ptr != nullptr); // 运行时将会中断执行 *ptr = 10;
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'错误 }
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; // 索引值在有效范围内 }
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'错误
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(); // 在使用指针之前确认其指向的对象存在 }
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'错误
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; // 将指针置为空指针,避免误用
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!