掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.28514

memcpy( &struct_a , NULL という書き方
投稿者---ななしー(2006/10/19 11:35:24)


稼動しているプログラムのメンテをすることになったのですが、
以下のような使い方があって、このままでいいのか悩んでおります。

ヘッダファイルで
#define NULL 0
定義

ソース内で

memcpy( &struct_a , NULL, 構造体のサイズ); /* データ格納の変数を初期化 */

このmemcpyの使い方は、何も問題を起こさないのでしょうか?

(ちなみに、上記ヘッダをインクルードしているいくつかのソースでは
先にstdio.hをインクルードしているため2重定義ワーニングが出ています。)



この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:memcpy( &struct_a , NULL という書き方 28515 nop 2006/10/19 12:24:15


No.28515

Re:memcpy( &struct_a , NULL という書き方
投稿者---nop(2006/10/19 12:24:15)


環境が書かれていないため、何とも言えないが、
標準Cの範疇では、鼻から悪魔が出ても文句は言えない。

コメントを見る限り、間違ったソースであると推測される。
# 書いた本人の意図がわからないので、何とも言えないが…


この投稿にコメントする

削除パスワード

No.28516

Re:memcpy( &struct_a , NULL という書き方
投稿者---ななしー(2006/10/19 13:18:07)


>環境が書かれていないため、何とも言えないが、
失礼。どんな環境でもこれはだめなんじゃないかと思っていたら書き忘れました。

OS:XP SP2
コンパイラ:NEC PM Plus(組み込み用です)

>標準Cの範疇では、鼻から悪魔が出ても文句は言えない。
しばらくCから離れていたため、不安になって質問したのですがやはり危険なようですね。

>コメントを見る限り、間違ったソースであると推測される。
># 書いた本人の意図がわからないので、何とも言えないが…
おそらくmemset書くつもりだとは思うのですが、担当はもういないので真相は闇の中です。

ただ、
memset( &struct_a , NULL, 構造体のサイズ);
にするとしても、NULLと書かないで'\0'と書くようにと学んだ自分からすると、気持ち悪い記述になっています。

/* 以下ちょっと愚痴
他のソースをよく見たら
memset( 変数, 0,
memset( 変数, 0x00,
memset( 変数, NULL,

というのが混在してました。
この辺りは修正するとなると、非常に面倒な手続き(大量な提出資料)
が必要になるのでこのまま行くしかない。

コーディング規約はどこいったんだろう?
*/


この投稿にコメントする

削除パスワード

No.28517

Re:memcpy( &struct_a , NULL という書き方
投稿者---たかぎ(2006/10/19 15:40:50)
http://takagi.in/


ただ、
>memset( &struct_a , NULL, 構造体のサイズ);
>にするとしても、NULLと書かないで'\0'と書くようにと学んだ自分からすると、気持ち悪い記述になっています。

おそらくmemsetの間違いでしょうね。
そしてこの部分はバグですが、その後の文脈を見れば、放置しても問題ないかどうかはわかると思います。(おそらく、放置しても、削除しても大丈夫かと)

非常に面倒な手続きを避けたい事情はわかるので、何か他の変更を行う際に、ついでに直すのが一番でしょうね。
ただ、今後MMUを持ったプロセッサに移植するときなど、アクセス保護例外の類が出る可能性は十分考えられます。

>memset( 変数, 0,
>memset( 変数, 0x00,

これらは許容範囲でしょう。

>memset( 変数, NULL,

これは間違いですが、実害がないのであれば、何かのついでがあるまで放置ですね。

結論としては、直せるなら直した方がいいに決まっていますが、他に為すべきことがたくさんあるなら、優先するほどのものではないかと思います。


この投稿にコメントする

削除パスワード

No.28527

Re:memcpy( &struct_a , NULL という書き方
投稿者---ななしー(2006/10/19 19:48:41)


>ただ、
>>memset( &struct_a , NULL, 構造体のサイズ);
>>にするとしても、NULLと書かないで'\0'と書くようにと学んだ自分からすると、気持ち悪い記述になっています。
>
>おそらくmemsetの間違いでしょうね。
>そしてこの部分はバグですが、その後の文脈を見れば、放置しても問題ないかどうかはわかると思います。(おそらく、放置しても、削除しても大丈夫かと)
>
>非常に面倒な手続きを避けたい事情はわかるので、何か他の変更を行う際に、ついでに直すのが一番でしょうね。
>ただ、今後MMUを持ったプロセッサに移植するときなど、アクセス保護例外の類が出る可能性は十分考えられます。
>
>>memset( 変数, 0,
>>memset( 変数, 0x00,
>
>これらは許容範囲でしょう。
>
>>memset( 変数, NULL,
>
>これは間違いですが、実害がないのであれば、何かのついでがあるまで放置ですね。
>
>結論としては、直せるなら直した方がいいに決まっていますが、他に為すべきことがたくさんあるなら、優先するほどのものではないかと思います。

ありがとうございました。

時間が許せば直したいのですが、このままにしておきます。
(せめてコメントだけでも入れておこう)


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧