assert文で配列要素の範囲外エラーを防ぐ

スポンサーリンク
スポンサーリンク
ライフスタイル関連のコンテンツ
お金 | 仕事 | 勉強 | プライベート | 健康 |
プログラミング関連のコンテンツ
C言語/C++入門 | Ruby入門 | Python入門 | プログラミング全般

assertモジュールを使うことで、プログラムのクラッシュを回避できます。
配列の範囲外エラーは、致命的なものになる場合がありますので、以下のようにassert文を利用すれば、セルフチェックとして働きます。

スポンサーリンク

#include <iostream>
#include <assert.h>
const int NUM = 5;	// 配列の要素数
int datas[NUM] = {1, 2, 3, 4, 5};
int main() {
	int index = 10;
	// assert文でindexが配列サイズの範囲か確認
	assert(index < static_cast<int>((sizeof(datas)/sizeof(datas[0]))));
	assert(index >= 0);
	std::cout << datas[index] << "\n";
	return(0);
}

上記コードでは・・・

assert(index < NUM); assert(index >= 0);

の部分で、index(指定したインデックス)がNUM(配列サイズ)の範囲内にあることを確認しています。
このプログラムの場合、indexが範囲外ですので、assert文がエラーメッセージを返し、プログラムは中断されます。

sizeof演算子は、変数のサイズをバイトで返します。
「sizeof(datas)/sizeof(datas[0])」とすることで、「配列全体のバイト÷配列要素一つのバイト」を計算し、配列の要素数を計算できます。

実行結果。

Assertion failed: index < static_cast((sizeof(datas)/sizeof(datas[0]))), file .\assert.cpp, line 8

プログラムは、assert文に差し掛かったところで、エラーを返し中断します。

スポンサーリンク
 
スポンサーリンク