- # C言語/C++入門 > 配列・文字列・数値と型
assert文で配列要素の範囲外エラーを防ぐ
スポンサーリンク
スポンサーリンク
ライフスタイル関連のコンテンツ
お金 | 仕事 | 勉強 | プライベート | 健康 | 心
プログラミング関連のコンテンツ
C言語/C++入門 | Ruby入門 | Python入門 | プログラミング全般
お金 | 仕事 | 勉強 | プライベート | 健康 | 心
プログラミング関連のコンテンツ
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文に差し掛かったところで、エラーを返し中断します。
スポンサーリンク
>> 次の記事 : Cの文字列とC++の文字列コピー
<< 前の記事 : 変数の初期化
- - 関連記事 -
- 2進数・8進数・16進数・10進数と変換方法
- 修飾子
- 定数と参照型の宣言・&
- 整数型・int
- CとC++文字列の変換、違い
- 文字列関数/文字列のコピー・連結
- Cの文字列とC++の文字列コピー
- 変数の初期化
- 文字列の入力・std::cin
- データ出力と入力/std::coutとstd::cin
- 文字列の宣言(std::string)と操作
- 配列の宣言
スポンサーリンク