- 1 名前:デフォルトの名無しさん [2007/11/03(土) 00:20:13 ]
- エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.43【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1190860744/l50 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
- 330 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 02:23:13 ]
- >>329
> *(str+i)のように参照した場合や、str+=iのように加算を行った場合であって そんなことどこにも書いてない。 p + n という式自体について述べた部分だよ。 * で参照したり = で代入したりする前の話。
- 331 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 02:43:49 ]
- なんで「一つ後ろ」みたいな表現するんだろう
一瞬、「じゃあふたつ後ろならいいのかよ」とか思ってしまったよ
- 332 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 10:42:18 ]
- >>330
仕様の読み方わかってないだろ。 プログラムの勉強からはじめたほうがいいね。
- 333 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 10:57:22 ]
- >>332
どこをどう読んだら >329 みたいな解釈になるのか教えてください。
- 334 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 11:24:57 ]
- >>328
加減演算子 ポインタオペランド及びその結果の両方が同じ配列オブジェクトの要素、又は 配列オブジェクトの最後の要素を一つ越えたところを指している場合、演算に よって、オーバーフローを生じてはならない。それ以外の場合、動作は未定義 とする。 あくまで未定義といっているのだから、規格上は何でもあり得る、つまり 実装依存ということになるね。>>329の言っている、エラーが出ない とか参照しなければ単なる数字になるということは、多くの実装がそう なっているだけであって、str+5000の加算演算で仮にクラッシュする実装が あっても、それは規格には従っていることになる。結局、この場合、 動作は未定義だから実装まかせ。 なので、厳密には>>328の意見が正しいと思われる。
- 335 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 13:04:40 ]
- 実際、タイトなメモリ空間モデルを持っている実装では、割と容易に起こり得る。
例えばint array[2]に対してarrayが0xfff0にアサインされているかもしれない。 ポインタもintも16bitなら、array + 4が0になってしまい、NULLと区別できなくなってしまう。 # 流石に即クラッシュはしないだろうけどね。
- 336 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 14:02:36 ]
- 境界の問題はポインタ特有の話じゃありませんね
- 337 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 17:44:01 ]
- それがどうかしましたか?
- 338 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 17:57:27 ]
- つまり見当違い
- 339 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 18:16:43 ]
- どこが?
そもそも誰か、境界の話なんてしているんですか?
- 340 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 18:31:33 ]
- >>336が場違いな件について
- 341 名前:wolf ◆8VH3XAqjlU mailto:sage [2007/11/15(木) 22:09:24 ]
- >>311
*** For your reference *** Windows. _heapwalk (CRT) msdn2.microsoft.com/en-us/library/h0c183dk(VS.80).aspx Linux 2.4x src\drivers\char\drm\sis_ds.c "void mmDumpMemInfo( memHeap_t *mmInit )"
|

|