- 【初心者歓迎】C/C++室 Ver.94【環境依存OK】©2ch.net
240 :デフォルトの名無しさん[]:2015/04/03(金) 10:56:53.19 ID:Vwd4pRr2 - >>239
ありがとう
|
- 【初心者歓迎】C/C++室 Ver.94【環境依存OK】©2ch.net
241 :デフォルトの名無しさん[]:2015/04/03(金) 13:04:47.12 ID:Vwd4pRr2 - memset出来る場合って構造体の中の変数が一致してる場合だけだよね?
例えば構造体のメンバがint型の変数とchar型のポインタだった場合には 型のタイプが一致しないからmemsetじゃなくて 初期化する関数を用意するかc++だったらコンストラクタに変数を初期化すべきですよね?
|
- 【初心者歓迎】C/C++室 Ver.94【環境依存OK】©2ch.net
244 :デフォルトの名無しさん[]:2015/04/03(金) 14:04:45.45 ID:Vwd4pRr2 - >>242
char*はおkでしたか。 ちなみに確かchar*のみの構造体は普通'\0'でmemsetでしたよね では逆にmemset出来ない場合はどのような場合でしょうか
|
- 【初心者歓迎】C/C++室 Ver.94【環境依存OK】©2ch.net
246 :デフォルトの名無しさん[]:2015/04/03(金) 14:13:18.44 ID:Vwd4pRr2 - ということは
構造体にどんな型のメンバ変数があっても memset(&struct, 0, sizeof(struct));でおっけーってことで宜しいでしょうか?
|
- 【初心者歓迎】C/C++室 Ver.94【環境依存OK】©2ch.net
247 :デフォルトの名無しさん[]:2015/04/03(金) 14:15:38.54 ID:Vwd4pRr2 - 追加質問ですが
memsetでメンバの中にポインタが入ってる場合って0だとnullと同じになるんでしょうか? 無知ですいません
|
- 【初心者歓迎】C/C++室 Ver.94【環境依存OK】©2ch.net
248 :デフォルトの名無しさん[]:2015/04/03(金) 14:20:53.43 ID:Vwd4pRr2 - 気のせいだったかもしれないのですがたしか標準のヘッダにNULLが0でdefineしてあった気がしたのですが...
気のせいかも
|
- 【初心者歓迎】C/C++室 Ver.94【環境依存OK】©2ch.net
251 :デフォルトの名無しさん[]:2015/04/03(金) 14:45:35.21 ID:Vwd4pRr2 - ありがとうございましたより理解が深まりました
|
- 【初心者歓迎】C/C++室 Ver.94【環境依存OK】©2ch.net
252 :デフォルトの名無しさん[]:2015/04/03(金) 14:49:51.77 ID:Vwd4pRr2 - >>250
違うのでしょうか? memsetで構造体の型分だけ0フィルするってことですよね? ってことは構造体が持ってるメモリが0フィルされるってことだから >>249さんが言ってる内容は正しいように感じますが もし違うのならちゃんと説明してください できないのなら単なる荒しですね
|
- 【初心者歓迎】C/C++室 Ver.94【環境依存OK】©2ch.net
253 :デフォルトの名無しさん[]:2015/04/03(金) 14:51:49.44 ID:Vwd4pRr2 - 構造体が持ってるメモリ
>構造体の持ってるメンバサイズ分だけ0フィルされる
|
- 【初心者歓迎】C/C++室 Ver.94【環境依存OK】©2ch.net
255 :デフォルトの名無しさん[]:2015/04/03(金) 15:07:36.25 ID:Vwd4pRr2 - >>254
そうでしたnullが0は処理系によって異なる場合があるので 保証はされてませんよね... memsetする際はポインタがある場合は初期化関数を別で用意したほうが安全ですね
|
- 【初心者歓迎】C/C++室 Ver.94【環境依存OK】©2ch.net
256 :デフォルトの名無しさん[]:2015/04/03(金) 15:12:05.18 ID:Vwd4pRr2 - >>254
実質0の場合がほとんどみたいですがvoid*なので ポインタはNULLで初期化するのが確実ですね 上記の場合ではポインタが0で初期化されてしまうので nullが0の処理系だと問題なく動作しますが そうでない場合は不正なメモリアクセスになって致命的なバグになる危険性がある という認識でよろしいでしょうか?
|
- 【初心者歓迎】C/C++室 Ver.94【環境依存OK】©2ch.net
259 :デフォルトの名無しさん[]:2015/04/03(金) 15:58:36.75 ID:Vwd4pRr2 - なんかもめちゃってるが結論としては
上記の場合構造体のメンバ分メモリが0フィルされるから 0で初期化したい場合は有効 ポインタがある場合は処理系によってNULLポインタの扱いが異なる場合があるから NULLで初期化すれば良いってこと?
|
- 【初心者歓迎】C/C++室 Ver.94【環境依存OK】©2ch.net
262 :デフォルトの名無しさん[]:2015/04/03(金) 16:09:11.05 ID:Vwd4pRr2 - >>261
ああ、memsetにこだわらないならそれの方がいいかも!
|
- 【初心者歓迎】C/C++室 Ver.94【環境依存OK】©2ch.net
263 :デフォルトの名無しさん[]:2015/04/03(金) 16:10:22.33 ID:Vwd4pRr2 - ただ初期化関数を作りたい場合はmemsetも便利なんだよなぁ
かゆいところに手が届かんねw
|
- 【初心者歓迎】C/C++室 Ver.94【環境依存OK】©2ch.net
266 :デフォルトの名無しさん[]:2015/04/03(金) 16:16:31.61 ID:Vwd4pRr2 - >>264
memsetした後にポインタだけNULLする初期化用の関数を用意するのはだめ?
|
- 【初心者歓迎】C/C++室 Ver.94【環境依存OK】©2ch.net
267 :デフォルトの名無しさん[]:2015/04/03(金) 16:21:50.75 ID:Vwd4pRr2 - >>264
すまんな>>259がわかりずらい書き方だった memset(&struct, NULL, sizeof(struct));はしてはいけないというのは理解してる前提で とりあえず memset(&struct, 0, sizeof(struct));した後に ポインタだけNULLで初期化するって意味だった>>259は
|
- 【初心者歓迎】C/C++室 Ver.94【環境依存OK】©2ch.net
275 :デフォルトの名無しさん[]:2015/04/03(金) 17:14:33.84 ID:Vwd4pRr2 - なんか質問した俺が置いてきぼりされてるんだがw
結局構造体にポインタがある場合でもとりあえず memsetで0埋めしてからポインタをNULLで初期化する関数を用意してやれば いいのん?
|
- 【初心者歓迎】C/C++室 Ver.94【環境依存OK】©2ch.net
285 :デフォルトの名無しさん[]:2015/04/03(金) 18:44:38.64 ID:Vwd4pRr2 - >>283
これってJIS X 3010:2003とどれ位ちがう? SO/IEC 9899:1999 (E)は英語だし解釈間違えるとひどいことになりそうだからw でもどっちも辞書としてつかうわけだよね?日本語使うからって広辞苑全文暗記してる人いないだろうし (一人もいないとは言ってないがw)
|
- 【初心者歓迎】C/C++室 Ver.94【環境依存OK】©2ch.net
288 :デフォルトの名無しさん[]:2015/04/03(金) 18:57:13.36 ID:Vwd4pRr2 - >>286
せやな プログラミングの書籍で翻訳版とかあるが 結構原文の解釈と違う場合もあるみたいでry これの場合は違っていてはいけないはずだから問題ないが ISO/IEC 9899:1999 (E) のほうは目を通したこと無いから(JIS X 3010:2003はサラッとだが ちょっと聞いてみたかっただけや堪忍してや
|