################################################################################ ●バスエラーとセグメントエラーの違い ################################################################################ バスエラーとセグメントエラー 「バス」というのは計算機内部の各構成装置がデータをやりとりするときの通信路の事で そこにうまく乗れない/乗せられない様なデータがあるとバスエラーになる。 「セグメント」というのは、あるプロセス に割り当てられたメモリー領域 (アドレスの 範囲) で、その領域の外のメモリーを読もうとするとセグメントエラーになる。 たとえば CPU がメモリーと値をやりとりするときに、その値が占める大きさのブロック 単位の区切り位置でしかやりとりできない場合がある。もし、CPU がメモリーから 4 バ イトの大きさのデータを読み込もうとすると、4 で割り切れるバイトアドレス (メモリ ー上の番地) からしか読み込めない。 このような制限があるとき、4 で割り切れないアドレスを指定してメモリーを読みにい くとバスエラーが起きる。 このような割り当ての管理は計算機の制御装置が行っている。 たとえば int * 型の外部変数 nData に、4 で割り切れない char へのアドレスがキャ ストして格納されている場合、次のような参照でバスエラーが出る。 printf("%d", *nData); また、上の例でnDataが NULLの場合はセグメントエラーになる。 セグメントエラーは NULL への参照で発生することが多い。