[過去ログ] 【初心者歓迎】C/C++室 Ver.101【環境依存OK】 [無断転載禁止]©2ch.net (1002レス)
上下前次1-新
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
868(1): デフォルトの名無しさん [sage] 2017/10/16(月) 06:49:20.44 ID:IzFutT5/(1/3) AAS
>>856856(4): デフォルトの名無しさん [sage] 2017/10/14(土) 23:37:16.03 ID:q9IpA67V(2/2) AAS
>>851-854
ということは、255サイズのリングバッファ作りたいときって
unsigned char buffer[255] = {0};
unsigned char head=0, tail=0;
unsigned char pop(){
if(head==255) head = 0;
return buffer[++head];
}
void push(unsigned char data){
if(tail==255) tail = 0;
buffer[++tail]=data;
}
このサイズチェックのif文なくても大丈夫ってことですか?
リングバッファの容量を256バイトにして、
バッファ領域を unsigned char buffer[256] = {0}; と
ちゃんと256バイト分確保すればサイズチェックは不要になるな。
ただし unsigned char の値範囲が 0 - 255 っていう「普通」の環境であること。
char が9ビットとか16ビットの機械/コンパイラもあるんだよね。
869(1): デフォルトの名無しさん [sage] 2017/10/16(月) 07:00:03.02 ID:IzFutT5/(2/3) AAS
それにしても >>856 は何やらモヤモヤするコードだと思ったら…
バッファサイズが 255 と半端な値
リングバッファのアクセス関数が push() / pop() て名前
インデクス操作が前置++
tail と head が互いを追い越す可能性(バッファあふれの可能性)
まだあるかな。
872(1): デフォルトの名無しさん [sage] 2017/10/16(月) 08:49:21.72 ID:IzFutT5/(3/3) AAS
先に == 255 の判定をして 0 に戻すから
範囲外の buffer[255] にアクセスする危険があるのか。
インデクスに前置++は見慣れなくて気色悪い、じゃ済まない問題だな。
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.031s