スレを勃てるまでもないC/C++の質問はここで 25
[隔離病棟]
©2ch.net (467レス)
スレを勃てるまでもないC/C++の質問はここで 25
[隔離病棟]
©2ch.net http://mevius.5ch.net/test/read.cgi/tech/1471100645/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
リロード規制
です。10分ほどで解除するので、
他のブラウザ
へ避難してください。
331: デフォルトの名無しさん [sage] 2018/02/16(金) 06:26:26.41 ID:6scYlSnj >>328 セグメンテーションフォールトを起こす直接の原因は、 memset() の第1引数 &aaa + sizeof(uint32_t) * 2 の部分だろうね。 printf("%p\n", &aaa); printf("%p\n", &aaa.c); printf("%p\n", &aaa + sizeof(uint32_t) * 2); 上の3行の出力を比較検討すると理屈が分かると思うけど説明は長くなる。 というか、俺にはポインタ加算について短く平易に説明する能力がない。 #include <stddef.h> // offsetof()マクロの定義 if (b == 1)memset(&aaa.c, 0x00, sizeof(aaa) - offsetof(struct aaa_tag, c); で動くと思うけど、 ダミーの構造体に読み込んでから、bの値を見て有効な部分だけ (あらかじめ0クリアしておいた)返却用の構造体にコピー、とする方が素直かも。 http://mevius.5ch.net/test/read.cgi/tech/1471100645/331
342: デフォルトの名無しさん [sage] 2018/02/17(土) 00:34:30.85 ID:2kmwzB0g >>340 構造体の途中をmemcpyとかで書き換えるのは問題ないよ。 >>331も指摘しているとおり、元のコードの問題はアドレスの計算が間違っていること。 &aaa+1なら、aaaの先頭アドレスに1を足した値ではなく、aaaの先頭アドレスにsizeof(aaa)を1つ分足した値になるよ。 http://mevius.5ch.net/test/read.cgi/tech/1471100645/342
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.015s