トップページ > プログラム > 2015年04月03日 > Vwd4pRr2

書き込み順位&時間帯一覧

1 位/167 ID中時間01234567891011121314151617181920212223Total
書き込み数00000000001001734120000019



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
【初心者歓迎】C/C++室 Ver.94【環境依存OK】©2ch.net

書き込みレス一覧

【初心者歓迎】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はサラッとだが
ちょっと聞いてみたかっただけや堪忍してや


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。