[過去ログ]
【初心者歓迎】C/C++室 Ver.101【環境依存OK】 [無断転載禁止]©2ch.net (1002レス)
【初心者歓迎】C/C++室 Ver.101【環境依存OK】 [無断転載禁止]©2ch.net http://mevius.5ch.net/test/read.cgi/tech/1500329247/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
854: デフォルトの名無しさん [sage] 2017/10/14(土) 20:59:25.10 ID:MqT/JM+M >>850 アクセスして良いメモリ範囲を越えてしまうバッファオーバーフローと、数値型の変数で表現可能な範囲を超えるオーバーフローは別の話。 そのソースで問題になるのは後者。 http://mevius.5ch.net/test/read.cgi/tech/1500329247/854
855: 片山博文MZ ◆T6xkBnTXz7B0 [sage] 2017/10/14(土) 21:16:55.49 ID:WLIJLkzn ちっ、俺がstrsafeを移植しないといけないか。 http://mevius.5ch.net/test/read.cgi/tech/1500329247/855
856: デフォルトの名無しさん [sage] 2017/10/14(土) 23:37:16.03 ID:q9IpA67V >>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文なくても大丈夫ってことですか? http://mevius.5ch.net/test/read.cgi/tech/1500329247/856
857: デフォルトの名無しさん [sage] 2017/10/14(土) 23:48:06.29 ID:oz/gRrlj お前の例だと255でゼロになるけど オーバーフローの場合は256でゼロになる よって必要 http://mevius.5ch.net/test/read.cgi/tech/1500329247/857
858: デフォルトの名無しさん [sage] 2017/10/15(日) 00:30:38.33 ID:9R+c2v2L ひでーコードだ。 http://mevius.5ch.net/test/read.cgi/tech/1500329247/858
859: デフォルトの名無しさん [sage] 2017/10/15(日) 00:40:58.16 ID:4m9/y95n headがぶっ壊れそう http://mevius.5ch.net/test/read.cgi/tech/1500329247/859
860: 片山博文MZ ◆T6xkBnTXz7B0 [sage] 2017/10/15(日) 05:20:33.19 ID:3VVV/TO4 >>856 #define BUFSIZE 255 unsigned char buf[BUFSIZE] = {0}; size_t head = 0, tail = 0; void push(unsigned char data) { assert(head < BUFSIZE); buffer[head] = data; ++head; if (head >= BUFSIZE) head = 0; } unsigned char pop() { unsigned char ret; assert(tail < BUFSIZE); ret = buf[tail]; ++tail; if (tail >= BUFSIZE) tail = 0; return ret; } http://mevius.5ch.net/test/read.cgi/tech/1500329247/860
861: デフォルトの名無しさん [sage釣] 2017/10/15(日) 09:46:01.53 ID:TMBfPksM >>856 head &= 255; でチェック不要 http://mevius.5ch.net/test/read.cgi/tech/1500329247/861
862: デフォルトの名無しさん [sage] 2017/10/15(日) 10:09:16.14 ID:IWZc9Obf 単なる例なんだろうけど、バッファサイズ=255って中途半端だな。 buffer[255]にセンチネル置くんならわかるが。 http://mevius.5ch.net/test/read.cgi/tech/1500329247/862
863: デフォルトの名無しさん [sage] 2017/10/15(日) 11:47:13.03 ID:uX83yxiA >>860 片山センセイ! unsigned char buf[BUFSIZE] = {0}; て書いてある本と unsigned char buf[BUFSIZE] = {}; て書いてある本があるんですけど同じでしょうか!? http://mevius.5ch.net/test/read.cgi/tech/1500329247/863
864: 片山博文MZ ◆T6xkBnTXz7B0 [sage] 2017/10/15(日) 11:57:22.80 ID:3VVV/TO4 >>863 https://cpplover.blogspot.jp/2010/09/blog-post_18.html?m=1 http://mevius.5ch.net/test/read.cgi/tech/1500329247/864
865: デフォルトの名無しさん [sage] 2017/10/15(日) 12:04:53.73 ID:t/hnbV6s >>861 というポカをするからif分で書いとけよ。 アンド演算子が使えるならコンパイラが 勝手にやってくれる。 http://mevius.5ch.net/test/read.cgi/tech/1500329247/865
866: デフォルトの名無しさん [sage] 2017/10/15(日) 13:58:06.01 ID:Mr2SylDC すこし譲って % 演算子で http://mevius.5ch.net/test/read.cgi/tech/1500329247/866
867: デフォルトの名無しさん [sage] 2017/10/16(月) 02:26:41.08 ID:0Qezg1+a 除算より条件分岐の方が速い定期 http://mevius.5ch.net/test/read.cgi/tech/1500329247/867
868: デフォルトの名無しさん [sage] 2017/10/16(月) 06:49:20.44 ID:IzFutT5/ >>856 リングバッファの容量を256バイトにして、 バッファ領域を unsigned char buffer[256] = {0}; と ちゃんと256バイト分確保すればサイズチェックは不要になるな。 ただし unsigned char の値範囲が 0 - 255 っていう「普通」の環境であること。 char が9ビットとか16ビットの機械/コンパイラもあるんだよね。 http://mevius.5ch.net/test/read.cgi/tech/1500329247/868
869: デフォルトの名無しさん [sage] 2017/10/16(月) 07:00:03.02 ID:IzFutT5/ それにしても >>856 は何やらモヤモヤするコードだと思ったら… バッファサイズが 255 と半端な値 リングバッファのアクセス関数が push() / pop() て名前 インデクス操作が前置++ tail と head が互いを追い越す可能性(バッファあふれの可能性) まだあるかな。 http://mevius.5ch.net/test/read.cgi/tech/1500329247/869
870: デフォルトの名無しさん [sage] 2017/10/16(月) 08:04:32.95 ID:iBTaJQF1 >char が9ビットとか16ビットの機械/コンパイラもあるんだよね。 え゛?まじで http://mevius.5ch.net/test/read.cgi/tech/1500329247/870
871: デフォルトの名無しさん [sage] 2017/10/16(月) 08:18:16.95 ID:ipy+DI/z >>869 buffer[1] 〜 buffer[255] を使う っていう大きな問題がある http://mevius.5ch.net/test/read.cgi/tech/1500329247/871
872: デフォルトの名無しさん [sage] 2017/10/16(月) 08:49:21.72 ID:IzFutT5/ 先に == 255 の判定をして 0 に戻すから 範囲外の buffer[255] にアクセスする危険があるのか。 インデクスに前置++は見慣れなくて気色悪い、じゃ済まない問題だな。 http://mevius.5ch.net/test/read.cgi/tech/1500329247/872
873: デフォルトの名無しさん [sage] 2017/10/16(月) 12:53:13.92 ID:TeGVYWUh >>871 buffer[1] 〜 buffer[254] までじゃね? まあそれはそれでもやもやするけど w http://mevius.5ch.net/test/read.cgi/tech/1500329247/873
874: デフォルトの名無しさん [sage] 2017/10/16(月) 12:59:13.25 ID:TeGVYWUh >>870 俺も実機は見たことないけど パーソナルコンピューターでは一般に8ビット長だが、DEC PDP-10、IBM 7090、ACOS-6の動作するNECのメインフレームなど、36ビットワードマシンでは1バイトが9ビットであり、charも9ビット長となっている。 http://www.wdic.org/w/TECH/char http://mevius.5ch.net/test/read.cgi/tech/1500329247/874
875: デフォルトの名無しさん [sage] 2017/10/16(月) 16:13:16.23 ID:mLqrsWtl >>872 危険ていうか 一周すれば確実にアクセスする >>873 え? http://mevius.5ch.net/test/read.cgi/tech/1500329247/875
876: デフォルトの名無しさん [sage] 2017/10/16(月) 16:14:16.39 ID:mLqrsWtl >>874 char16bitならもうちょっと身近に http://mevius.5ch.net/test/read.cgi/tech/1500329247/876
877: デフォルトの名無しさん [sage釣] 2017/10/16(月) 20:14:57.67 ID:e0xkLpP0 >>870 DSPとかだと40bitなんてのもあるよ http://mevius.5ch.net/test/read.cgi/tech/1500329247/877
878: デフォルトの名無しさん [] 2017/10/16(月) 21:01:51.62 ID:JAGwlDmF >>877 ほんとに? http://mevius.5ch.net/test/read.cgi/tech/1500329247/878
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 124 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.019s