C++에서 액세스 위반 처리

Syed Hassan Sabeeh Kazmi 2023년10월12일
  1. C++에서 동적 메모리 할당에 의한 액세스 위반 해결
  2. C++에서 클래스의 개체를 만들어 액세스 위반 해결
C++에서 액세스 위반 처리

세그먼테이션 오류라고도 하는 액세스 위반은 C++ 프로그램이 범위에 예약되지 않은 메모리에 액세스하려고 시도했음을 의미합니다. 이 자습서에서는 C++에서 액세스 위반 오류를 해결하는 방법을 알려줍니다.

적절한 초대 없이 위치에 액세스하는 규범을 위반하거나 C++의 다양한 엔터티에 액세스, 이해 또는 무시하면 액세스 위반 오류가 발생할 수 있습니다. 동적 메모리를 사용하거나 대상 클래스의 유효한 개체를 만들어 C++에서 액세스 위반 오류를 수정할 수 있습니다.

C++에서 동적 메모리 할당에 의한 액세스 위반 해결

대상 클래스 포인터의 생성은 프로그래머가 동적 메모리를 할당하여 이 방법을 사용할 수 있도록 클래스 멤버 함수에 액세스하는 데 중요합니다. 다음 C++ 코드 컴파일 및 실행을 이해하여 이 메서드가 원하는 출력을 얻는 방법을 이해합니다.

생성자에서 포인터를 설정하는 것을 잊고, 선언 시 모든 변수를 초기화하지 않고, 읽기/쓰기 액세스 권한 부여가 이러한 오류의 일반적인 원인입니다. 액세스 위반 예외를 잡는 것은 매우 나쁜 생각이기 때문에 복구하기 어렵습니다.

#include <iostream>

using namespace std;

class dynamicMemory {
 public:
  void outputPrint() {
    cout << "Dynamic memory allocated successfully!" << endl;
  }
};

int main() {
  // object of the `dynamicMemory` class
  dynamicMemory *accTest = new dynamicMemory;
  accTest->outputPrint();
  return 0;
}

출력:

Dynamic memory allocated successfully!

때로는 개발자가 배열 범위를 초과하는 것을 액세스 위반의 유효한 원인으로 오해하는 경우가 있습니다. 그러나 증가된 포인터가 스택 공간에 액세스하기 때문에 세그먼트 오류나 위반이 발생하지 않습니다.

특정 사용자 또는 C++ 프로그램에 속하지 않는 메모리에 액세스하면 액세스 위반 오류가 발생할 수 있습니다. 예를 들어 프로그램이 메모리의 읽기 전용 위치에서 읽기/쓰기 작업을 수행하려고 할 때입니다.

코드 라인에서 오류를 일으킨 포인터나 대상 클래스를 찾는 데 어려움이 있는 이 오류의 원인을 찾기가 어렵습니다.

다음과 같은 다양한 유형의 액세스 위반 오류가 있을 수 있습니다. 읽기 액세스 위반, 연결된 목록의 읽기 액세스 위반예외 발생: 읽기 액세스 위반. ** 올바른 데이터**는 C++에서 0x4였습니다.

C++에서 클래스의 개체를 만들어 액세스 위반 해결

대상 클래스의 개체 생성은 C++에서 액세스 위반 오류를 해결하기 위한 대체 접근 방식입니다. 유효한 클래스 개체를 사용하여 전체 프로세스를 보다 효율적으로 만들고 대상 클래스의 멤버 함수에 액세스할 수 있습니다.

이 새로 생성된 클래스 개체를 사용하면 . 연산자를 사용하여 멤버 함수에 액세스합니다. 프로그램의 이 특정 변경은 원하는 출력을 얻기 위해 코드를 성공적으로 컴파일하기 위해 코드와 관련된 액세스 위반 또는 분할 오류 오류를 해결할 수 있습니다.

#include <iostream>

using namespace std;

class dynamicMemory {
 public:
  void outputPrint() {
    cout << "A valid object of the target class is created successfully!"
         << endl;
  }
};

int main() {
  dynamicMemory accTest;
  accTest.outputPrint();
  return 0;
}

출력:

A valid object of the target class is created successfully!

액세스 위반은 메모리 손상을 나타내는 오류이므로 문자열 리터럴 수정, 해제된 주소에 액세스, 배열 인덱스 범위를 벗어나 액세스, 초기화되지 않은 포인터 역참조 및 cin >>의 부적절한 사용이 주요 원인일 수 있습니다. 발생.

해결하기 어려운 오류일 수 있습니다. 그러나 액세스 위반 오류는 사용자의 부주의 또는 부주의한 실수의 결과만을 반영합니다.

이 자습서에서는 액세스 위반 오류에 대한 자세한 이해와 다양한 프로그래밍 방법을 활용하여 이를 해결하는 방법을 제공합니다. 결국 이 학습을 통해 C++ 프로그램을 작성하는 동안 액세스 위반 오류를 피할 수 있습니다.

Syed Hassan Sabeeh Kazmi avatar Syed Hassan Sabeeh Kazmi avatar

Hassan is a Software Engineer with a well-developed set of programming skills. He uses his knowledge and writing capabilities to produce interesting-to-read technical articles.

GitHub