腕時計の沼、オーディオの沼、PCの沼。『タクジの沼』

型変換

型変換(キャスト)

符号と制度に注意しましょう。

[例:良くないプログラム(暗黙の型変換)]
int	ival;
char	cval;

cval = ival;

[例:良いプログラム(明示的な型変換)]
int	ival;
char	cval;

cval = (char)ival;

[例1:符号無し整数から符号付き整数へのキャスト]
unsigned short int	uival = 65535;
short int		ival;

ival = (short int)uival;		/* 値65535が-1に化ける */

[例2:符号付き整数から符号無し整数へのキャスト]
unsigned short int	uival;
short int		ival = -1;

uival = (unsigned short int)ival;	/* 値-1が65535に化ける */

メモリリーク

プログラムの中で一旦確保したメモリ領域が、それが不要となった後も再利用されずメモリ領域をどんどん圧迫して、 最終的に利用できるメモリ領域をなくしてしまう現象のことです。

よく問題となるのがヒープ領域(mallocによって確保したバッファは、freeによって解放) 資源の確保と解放は同じ関数の同じ階層で記述し、抜け道を作らないことが重要になります。

バッファオーバーフロー

配列サイズを上回るデータを配列にセットすると、配列が定義された領域をオーバーして、そこにもともと置かれていたデータを壊してしまうことです。

スタックオーバーフロー

スタックの残容量がマイナスになると、定義されたスタック領域を超えて別領域にスタックが伸びていくことになり、 結果としてデータやプログラムが壊れてしまうことです。
スタックの最大サイズを見積ることが重要になります。