C ランタイム エラー:「アクセス違反」を解決するにはどうすればよいですか?
C プログラミングでは、実行時エラーはよく直面する課題の 1 つです。一般的なエラーの 1 つは「アクセス違反」です。これは通常、不正なメモリ位置にアクセスしようとしたときに発生します。この記事では、いくつかの一般的な原因と解決策について説明し、対応するコード例を示します。
Null ポインター アクセスは、「アクセス違反」エラーの最も一般的な原因の 1 つです。このエラーは、null ポインタが指すメモリにアクセスしようとすると発生します。
これはサンプル コードです:
int* ptr = nullptr; *ptr = 10; // 此处会发生'access violation'错误
解決策:
ポインターにアクセスする前に、ポインターが null かどうかを確認する必要があります。これは、条件ステートメントまたはアサーションを使用して実現できます。
int* ptr = nullptr; if (ptr != nullptr) { *ptr = 10; // 在访问指针之前先进行空指针检查 }
またはアサーションを使用して null ポインタ チェックを実行します
int* ptr = nullptr; assert(ptr != nullptr); // 运行时将会中断执行 *ptr = 10;
「アクセス違反」エラーのもう 1 つの一般的な原因配列の境界外アクセスです。このエラーは、配列外のインデックスにアクセスしようとすると発生します。
以下はサンプル コードです:
int arr[5]; for (int i = 0; i <= 5; ++i) { arr[i] = i; // 此处会发生'access violation'错误 }
解決策:
配列にアクセスするときは、インデックス値が配列の有効な範囲内にあることを確認する必要があります。
int arr[5]; for (int i = 0; i < 5; ++i) { arr[i] = i; // 索引值在有效范围内 }
もう 1 つのよくある間違いは、削除または解放されたオブジェクト ポインターを介してアクセスすることです。
以下はサンプル コードです:
class MyClass { public: void doSomething() { /* ... */ } }; MyClass* ptr = new MyClass; delete ptr; ptr->doSomething(); // 此处会发生'access violation'错误
解決策:
ポインターを使用する前に、ポインターが指すオブジェクトが存在することを確認する必要があります。
MyClass* ptr = new MyClass; if (ptr != nullptr) { ptr->doSomething(); // 在使用指针之前确认其指向的对象存在 }
C プログラミングでは、動的に割り当てられたメモリ領域を手動で解放することがあります。ただし、メモリを解放した後もメモリへのポインタを使用し続けると、「アクセス違反」エラーが発生します。
以下はサンプル コードです:
int* ptr = new int; delete ptr; *ptr = 10; // 此处会发生'access violation'错误
解決策:
メモリを解放した後、メモリを指すポインタが使用されなくなったことを確認する必要があります。
int* ptr = new int; delete ptr; ptr = nullptr; // 将指针置为空指针,避免误用
概要:
「アクセス違反」エラーは、C プログラミングでよくある実行時エラーの 1 つです。この記事では、いくつかの一般的な原因と解決策、および対応するコード例を示します。 C でプログラミングする場合、このようなエラーを避けるためにポインターと配列へのアクセスを注意深くチェックする必要があります。
以上がC++ ランタイム エラー:「アクセス違反」を解決する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。